如何让MSGBOX在规定秒数后自动结束?

aabiao 2004-05-06 06:47:58
程序弹出提示,如何会自动结束?
若不行,是不是可以用窗体实现?
如何定义窗体的大小,能随着显示的内容自动变化?
如何传递内容?
...全文
1104 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cpio 2004-08-04
  • 打赏
  • 举报
回复
晕,这又不是什么大难问题

只用加个Timer,在弹出对话框的时候激活Timer,Timer时间到了就用SendKeys发送回车

hisofty 2004-05-10
  • 打赏
  • 举报
回复
关于定时关闭询问对话框的一点体会
http://www.csdn.net/develop/Read_Article.asp?Id=24855
starsoulxp 2004-05-10
  • 打赏
  • 举报
回复
daisy8675(莫依) 的方法很好,不过这里还是自建一个窗体加上timer的比较好
小光快闪 2004-05-10
  • 打赏
  • 举报
回复
123
aabiao 2004-05-07
  • 打赏
  • 举报
回复
谢谢大家。
在VB环境TIMER并不能中断MSGBOX,而编译成EXE,就可以了。
yinweihong 2004-05-06
  • 打赏
  • 举报
回复
恩,楼上的连注意的都说了,我没话说了
qiaobushi@ 2004-05-06
  • 打赏
  • 举报
回复
除了“是\否”、“确定\忽略\取消”不能用,其它的可以用
PasswordError 2004-05-06
  • 打赏
  • 举报
回复
请大家不要忽视这样一个问题:

当 MsgBox 信息框只有一个“确定”按钮的时候,可以利用 FindWindow 找到其窗口句柄,然后发送 WM_CLOSE 消息将其关闭。

但是,如果在 MsgBox 上有两个或者两个以上的按钮——比如“是\否”、“确定\忽略\取消”等——在这种情况下,发送 WM_CLOSE 消息将不能关闭信息框。

87721054 2004-05-06
  • 打赏
  • 举报
回复
厉害~~
给楼主提供一个最简单的方法
自己做一个窗体,加个倒计时...呵呵
dreamreality 2004-05-06
  • 打赏
  • 举报
回复
对于MSGBOX同样是有句柄的,所以你可利用API函数来实现你想的东西
一个是Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
与Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
就可以搞定的
daisy8675 2004-05-06
  • 打赏
  • 举报
回复
api的辦法:
主題:如何設定 MsgBox 在若干時間之後若無回應則自動關閉?
來源:Ask the Visual Basic Pro
版本:VB6 / VB5 / VB4-32

--------------------------------------------------------------------------------


在我們的印象中,VB 所提供的 MsgBox 是一個強制回應的視窗,您一定要按了其中的某一個 CommandButton 之後,它才會關閉!但是在某些軟体中,我們會看到,明明是使用系統的 MsgBox,可是您如果不理它,幾秒鐘之後,它就自行關閉了!別人是如何做到的呢?這個問題偶而會出現在討論區中,有的人會回答:

只要自己做一個類似 MsgBox 的視窗,就可以自己用 Timer 來控制這個視窗何時要關閉了!

但是,其實不用這麼麻煩的,只要使用系統的 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 之後才有效!

daisy8675 2004-05-06
  • 打赏
  • 举报
回复
如何用VB在一段時間 後自動關閉程式中的MsgBox!並且有倒數的功能!
//////////////////////////////////////////
本範例請將下列程式全部複製至[新表單]中'不用加入任何物件及其它程式碼!
'[一般]
Dim k As Integer '計時變數
'加入物件及事件
Dim WithEvents Command1 As CommandButton,WithEvents Timer1 As Timer
Private Sub Command1_Click()
Timer1.Interval = 1000: Timer1.Enabled = True: k = 0
MsgBox "三秒後自動關閉!", , "訊息視窗"
Form1.Caption = "結束[訊息視窗]":k = 0: Timer1.Enabled = False
End Sub
Private Sub Form_Load()
Form1.Move 0, 0, 3000, 1500
Set Command1 = Controls.Add("vb.commandbutton", "command1", Form1)
Set Timer1 = Controls.Add("vb.timer", "timer1", Form1)
Command1.Move (Form1.ScaleWidth - 900) / 2, (Form1.ScaleHeight - 500) / 2, 900, 500
Command1.Caption = "按我!":Command1.Visible = True
End Sub
Private Sub Timer1_Timer()
'▲編譯後這裏的數字在 MsgBox出現後仍會跳,▲在VB中執行時則不會!
k = k + 1: Form1.Caption = 3 - k
If k >= 3 Then
Form1.Caption = "時間到!"
On Error Resume Next
'防止使用者[▲自行關閉]MsgBox而讓[AppActivate]產生錯誤
AppActivate "訊息視窗", True
'如果[駐點仍停留在 MsgBox]則直接消失!'加上True是讓程式等到[程式表單]或[MsgBox]▲真正地得到駐點才動作!'因為如果[駐點在中途被轉移],那 MsgBox 有可能只在那邊[閃爍],'而未真正得到駐點!(這好像跟Windows的設定有關!)'如果是上述的狀況,時間到之後只要[表單]或[MsgBox]得到駐點,MsgBox都會自動消失!而不用去按其上的按鈕!'還有一種▲特殊的情況是駐點被轉停在[桌面圖示]上時:'則必須真正由[MsgBox]得到駐點(在 MsgBox 任一處按滑鼠)才會消失!

SendKeys "{ESC}" '/{Enter} 改用 Esc 比較不會有副作用! 不過不適用 VbYesNo
k = 0: Timer1.Enabled = False
End If
End Sub

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧