VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)
首页 - 经验之谈 - 如何设定 MsgBox 在若干时间之后若无回应則自动关闭?
发表评论(0)作者:, 平台:, 阅读:13152, 日期:2000-04-06


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

来源:Ask the Visual Basic Pro

版本:VB6 / VB5 / VB4-32

资料整理:影子 VB爱好者乐园 yingzi007.126.com





在我们的印象中,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 之后才有效!