web-dev-qa-db-ja.com

一定時間後に自動的に消えるmsgbox

Vb.netにメッセージを表示し、一定時間後に自動的に消えるタイプのmsgboxはありますか?または、ユーザーが[OK]をクリックせずにmsgboxを非表示にする方法はありますか?

9
Furqan Sehgal

使用できます

CreateObject( "WScript.Shell")。Popup( "Welcome"、1、 "Title")

このメッセージボックスは1秒後に自動的に閉じます

10
Linendra Soni

いいえ、これを行う組み込みのフレームワークコントロールはないと思います。ただし、これは、Loadイベントでタイマーを起動するカスタムビルドのフォームを使用して簡単に行うことができます。次に、設定された時間が経過すると、timer Elapsedイベントで、フォームを閉じるだけで済みます。

3
AJ.

Linendra Soniの答えは良いですが、新しいバージョンのWindowsやExcelでは機能する場合と機能しない場合があります。

これは新しいバージョンで完全に機能します:

Function MessageTimeOut(sMessage As String, sTitle As String, iSeconds As Integer) As Boolean
    Dim Shell
    Set Shell = CreateObject("WScript.Shell")
    Shell.Run "mshta.exe vbscript:close(CreateObject(""WScript.Shell"").Popup(""" & sMessage & """," & iSeconds & ",""" & sTitle & """))"
    MessageTimeOut = True
End Function

次のように使用します:

Sub Example()
    Dim chk As Boolean
    chk = MessageTimeOut("Hello!", "Example Sub", 1) 'if chk returned FALSE that means the function was not executed successfully
End Sub

または

Sub Example()
    Call MessageTimeOut("Hello!", "Example Sub", 1) 'you don't need to get the output of the function
End Sub

出力:

enter image description here

1
Ibo

答えに触発されて、これは私が持ってきたものであり、単純なケースでうまく機能し、すべての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:これをyourApp.configファイルに追加する必要があります:

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

1
Alexis Martial

タイマーまたはある種の遅延/スリープを使用し、時間が経過した後に実行します

SendKeys.Send("~")

これは、ENTERキーを押した場合と同じです。

Msgboxウィンドウを再度アクティブにして、続行する必要がある場合があります。

1
Ed W

ファイルの更新時刻を表示し、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

そのようなツールはないと思います。しかし、私はあなたがこのステップに従うことでそれを行うことができると思います。

  1. Form要素のインスタンスを作成し、メッセージボックスのようにデザインします。
  2. フォームロードイベントで、システム時刻を取得するか、間隔値でタイマーを開始します。
  3. このタイマーは、必要な秒数をチェックしてから、FormCloseイベントを呼び出します。

追伸:私が間違っていたら、ごめんなさい。私は何かを解決しようとするだけです、多分あなたの問題を解決するより良い方法があります。

0
Vecihi Baltacı

これを行うには、フォームにタイマーを追加します。 '100ミリ秒後に自動閉じるタイマーDim秒AsInteger = 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
MitchP12