msgbox, который исчезает автоматически через определенное время - PullRequest
8 голосов
/ 28 июня 2011

Есть ли какой-либо тип msgbox в vb.net, который выдает сообщение, и оно автоматически исчезает через определенное время? Или есть какой-нибудь способ скрыть msgbox, не нажимая кнопку OK?

Ответы [ 8 ]

9 голосов
/ 18 сентября 2014

Вы можете использовать

CreateObject ("WScript.Shell"). Popup ("Приветствие", 1, "Заголовок")

это сообщение автоматически закрываетсячерез 1 секунду

3 голосов
/ 28 июня 2011

Нет, я не думаю, что есть встроенный элемент управления каркасом, который сделает это за вас.Однако вы можете легко сделать это с помощью пользовательской формы, которая запускает таймер в своем событии Load.Затем, когда установленное количество времени прошло, в событии таймера Elapsed вы можете просто закрыть форму.

1 голос
/ 04 декабря 2016

Вдохновленный ответами, это то, с чем я пришел, прекрасно работающий в простых случаях, позволяющий использовать все функции MsgBox напрямую:

Imports System.Threading

Module FormUtils
    Private sAutoClosed As Boolean

    Private Sub CloseMsgBoxDelay(ByVal data As Object)
        System.Threading.Thread.Sleep(CInt(data))
        SendKeys.SendWait("~")
        sAutoClosed = True
    End Sub

    Public Function MsgBoxDelayClose(prompt As Object, ByVal delay As Integer, Optional delayedResult As MsgBoxResult = MsgBoxResult.Ok, Optional buttons As MsgBoxStyle = MsgBoxStyle.ApplicationModal, Optional title As Object = Nothing) As MsgBoxResult
        Dim t As Thread

        If delay > 0 Then
            sAutoClosed = False
            t = New Thread(AddressOf CloseMsgBoxDelay)
            t.Start(delay)

            MsgBoxDelayClose = MsgBox(prompt, buttons, title)
            If sAutoClosed Then
                MsgBoxDelayClose = delayedResult
            Else
                t.Abort()
            End If
        Else
            MsgBoxDelayClose = MsgBox(prompt, buttons, title)
        End If

    End Function
End Module

PS: Вы должны добавить это в ваш файл App.config:

<appSettings> <add key="SendKeys" value="SendInput"/> </appSettings>

1 голос
/ 16 ноября 2013

Используйте таймер или некоторый тип задержки / сна, и по истечении времени запустите

SendKeys.Send("~")

То же самое имеет нажатие клавиши ВВОД.

Возможно, вам придется возобновить его, активировав окно msgbox снова.

0 голосов
/ 17 июня 2019

У меня есть код, чтобы показать время обновления файла и закрыть окно сообщения в течение 3 секунд.Пожалуйста, смотрите ниже.Я надеюсь, что этот код может поддержать эту тему.

    Sub Workbook_Open()
    Application.ScreenUpdating = False
    SplashUserForm.Show
    Windows(ThisWorkbook.Name).Visible = True
    Application.ScreenUpdating = True

    last_update = "Last updated : " & Format(FileDateTime(ThisWorkbook.FullName), "ddd dd/mm/yy hh:mm ampm")

    'Close message after time if no action!
    Dim myTimedBox As Object
    Dim boxTime%, myExpired%, myOK%, myQuestBox%

    'Access timed message box.
    Set myTimedBox = CreateObject("WScript.Shell")
    boxTime = 3


    'User Selected "OK."
    If myQuestBox = 1 Then
    'Add any code in place of code below for this condition!
        myOK = myTimedBox.Popup(last_update & vbCr & "Do nothing and this message will close in 3 seconds.", _
        boxTime, "You Took Action!", vbOKOnly)

    Else

    'User took no Action!
        myExpired = myTimedBox.Popup(last_update & vbCr & "Do nothing and this message will close in 3 seconds.", _
        boxTime, "No Action Taken!", vbOKOnly)
    End If


End Sub
0 голосов
/ 22 марта 2017

Вы можете сделать это, добавив в форму таймер.'Таймер для автозамены через 100 мс. Тусклые секунды как целое число = 100

'Existing code....
 Timer1.Start()
 MessageBox.Show("Window Timed Out", "TimeOut")
 Me.Close()

'Tick Event Code
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As 
             System.EventArgs) Handles Timer1.Tick
    seconds = seconds - 1
    If seconds < 1 Then`    
       Me.Close()
    End If
End Sub
0 голосов
/ 16 ноября 2013

Не думаю, что есть такой инструмент. Но я думаю, что вы можете сделать это с помощью следующих шагов;

  1. Создайте экземпляр элемента Form и создайте его как окно сообщения.
  2. В событии загрузки формы получите системное время или запустите таймер со значением интервала.
  3. Этот таймер показывает, сколько секунд вы хотите, а затем вызовите событие закрытия формы.

П.С .: Если я ошибаюсь, извините. Я только пытаюсь что-то решить, может быть, есть лучший способ решить вашу проблему.

0 голосов
/ 28 июня 2011
...