说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB如何设定 MsgBox 在若干时间之后若无回应則自动关闭?

HTML文档下载 WORD文档下载 PDF文档下载
VB如何设定 MsgBox 在若干时间之后若无回应則自动关闭?


在我们的印象中,VB 所提供的 MsgBox 是一个强制回应的窗口,您一定要按了其中的某一个 CommandButton 之后,它才会关闭!但是在某些软件中,我们会看到,明明是使用系統的 MsgBox,可是您如果不理它,几秒钟之后,它就自行关闭了!別人是如何做到的呢?


只要使用系統的 MsgBox 再加一个 Timer 就可以控制了!

我们都知道 MsgBox 可以设定成很多不同的样子,可以有很多不同的显示,不同的按鈕,其中控制按鈕的部份,可以设定的常数如下:

常数 值 說明
vbOKOnly 0 只显示 OK 按鈕。
VbOKCancel 1 显示 OK 及 Cancel 按鈕。
VbAbortRetryIgnore 2 显示 Abort、 Retry 及 Ignore 按鈕。
VbYesNoCancel 3 显示 Yes、No 及 Cancel 按鈕。
VbYesNo 4 显示 Yes 及 No 按鈕。
VbRetryCancel 5 显示 Retry 及 Cancel 按鈕。

为什么要特別提到 MsgBox 的常数呢?因为下面我们要告訴您的方法,还是有一点点限制的!当您设定的常数是 VbAbortRetryIgnore 或 VbYesNo 时,下面的方法也是沒用的!

'在表单的声明区中加入以下的声明

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long

Private Const WM_CLOSE = &H10
Private Const MsgTitle As String = "Test Message"
'在表单中加入一个 CommandButton 及一个 Timer 控制項,加入以下程序代码:

Private Sub Command1_Click()
Dim nRet As Long
Timer1.Interval = 3000
Timer1.Enabled = True
nRet = MsgBox("若您不回应的話,3 秒后此 MsgBox 会自动关闭", 64, MsgTitle)
Timer1.Enabled = False
End Sub

Private Sub Timer1_Timer()
Dim hWnd As Long
hWnd = FindWindow(vbNullString, MsgTitle)
Call SendMessage(hWnd, WM_CLOSE, 0, ByVal 0&)
End Sub
好了,很简单吧!您运行程序时,当 MsgBox 出现 3 秒之后,就会自动关闭了!
注意:此方法的限制說明:

1、当常数设定为 VbAbortRetryIgnore 或 VbYesNo 时,无效!
2、在 Design Time 时,无效,必須 Make EXE 之后才有效!


备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘