vb.net msgbox 打开的msgbox如何加参数让窗口定时自动关闭?

查看: 6747|回复: 18
怎么让MSGBOX只显示几秒钟后自动关闭
阅读权限30
在线时间 小时
怎么让MSGBOX只显示几秒钟后自动关闭,VBA代码怎么写
阅读权限90
在线时间 小时
& & & & & & & &
这个要用API写才好,论坛有代码的,你去找找吧,要学会搜索哦!
阅读权限20
在线时间 小时
CreateObject("Wscript.shell").popup "执行完毕!", 2, "提示!", 0 + 32用这个代替
阅读权限30
在线时间 小时
以下是引用xiaoxue3850在 17:26:08的发言:CreateObject("Wscript.shell").popup "执行完毕!", 2, "提示!", 0 + 32用这个代替& &谢谢楼主分享! &&&& 这个能否加上"是"和"否"做选择呢? 如果可以那应该怎么写? 意思即: 打开的提示窗口有"是"和"否"可以选择,选择"是"时就执行一段代码,"否"就关闭,不做选择时几秒后自行关闭,谢谢!! &[em08]
[此贴子已经被作者于 18:02:43编辑过]
阅读权限30
在线时间 小时
以下是引用笨熊弟弟在 17:58:25的发言:& &谢谢楼主分享! &&&& 这个能否加上"是"和"否"做选择呢? 如果可以那应该怎么写? 意思即: 打开的提示窗口有"是"和"否"可以选择,选择"是"时就执行一段代码,"否"就关闭,不做选择时几秒后自行关闭,谢谢!! &[em08]CreateObject("Wscript.shell").popup "执行完毕!", 2, "提示!", vbYes
阅读权限20
在线时间 小时
& & & & & & & &
谢谢。学习。
阅读权限95
在线时间 小时
我的机子不会2秒后关闭Wscript.shell,不去按它就是不关闭,以前如此,现在还是一样,不知那里设定有问题。
阅读权限30
在线时间 小时
CreateObject("Wscript.shell").popup "执行完毕!", 2, "提示!", vbYes哪里有CreateObject("Wscript.shell")的相关窗口的代码?
阅读权限20
在线时间 小时
阅读权限50
在线时间 小时
& & & & & & & &
我想,写一段循环代码,步进小一点,比如for i=1 to 1000 step 0.2循环完了就关闭MSGBOX,这样更简单些.
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师| Copyright &
. All Rights Reserved .如何让MSGBOX在规定秒数后自动结束?
[问题点数:0分]
本版专家分:85
结帖率 97.2%
CSDN今日推荐
本版专家分:60245
2009年7月 荣获微软MVP称号2005年7月 荣获微软MVP称号2008年7月 荣获微软MVP称号2007年7月 荣获微软MVP称号2006年7月 荣获微软MVP称号
2005年8月 VB大版内专家分月排行榜第一2005年3月 VB大版内专家分月排行榜第一
2005年7月 VB大版内专家分月排行榜第二
2005年6月 VB大版内专家分月排行榜第三2005年4月 VB大版内专家分月排行榜第三2004年4月 VB大版内专家分月排行榜第三
本版专家分:60245
2009年7月 荣获微软MVP称号2005年7月 荣获微软MVP称号2008年7月 荣获微软MVP称号2007年7月 荣获微软MVP称号2006年7月 荣获微软MVP称号
2005年8月 VB大版内专家分月排行榜第一2005年3月 VB大版内专家分月排行榜第一
2005年7月 VB大版内专家分月排行榜第二
2005年6月 VB大版内专家分月排行榜第三2005年4月 VB大版内专家分月排行榜第三2004年4月 VB大版内专家分月排行榜第三
本版专家分:331
本版专家分:100
结帖率 92.71%
本版专家分:34
本版专家分:81
本版专家分:13547
本版专家分:85
结帖率 97.2%
本版专家分:0
本版专家分:13695
本版专家分:8829
本版专家分:14653
匿名用户不能发表回复!|
CSDN今日推荐查看: 9591|回复: 38
如何让一个msgbox提示框显示三秒后不用手动点确定自动消失?
或者我自己做个窗体当msgbox提示框!!
怎么让他显示三秒后自动消失?
我有这个代码,不过现在在外面,明天回去后发给你
用MSGBOX我不懂,但可以将提示信息写到另一窗口中,用TIMER控制,如:
'提示信息在FORM2中
Private Sub Command1_Click()
& &&&Form2.Show
& &&&Timer1.Enabled = True
Private Sub Timer1_Timer()
& & Static i As Integer
& & i = i + 1
& & If i = 3 Then
& && &&&Unload Form2
& && &&&i = 0
& & End If
倒计时可定制消息框
Option Explicit
Private Sub Command1_Click()
&&
&&'显示message box,
&&'传递 CUSTOM_MSG_PARAMS结构
& &With cmp
& && &.sTitle = &倒计时 MessageBox Hook Demo&
& && &.sPrompt = &要马上执行,选择开始.& & vbCrLf & _
& && && && && &&&&或点击选择.& & vbCrLf & vbCrLf & _
& && && && && &&&&将在 3 后自动执行。& & Space$(20)
& && &.dwStyle = MB_SELECTBEGINSKIP Or MB_ICONINFORMATION
& && &.bUseTimer = True& && && && && &'如果true,timer会更新显示每 dwTimerInterval
& && &.dwTimerDuration = 3& && && &&&'等待秒数
& && &.dwTimerInterval = 1000& && && &'倒计时秒数
& && &.dwTimerExpireButton = IDBEGIN&&'timeout执行动作
& && &.dwTimerCountDown = 0& && && &&&'
& && &.hOwnerThread = Me.hwnd& && && &'调用窗口句柄
& && &.hOwnerWindow = Me.hwnd& && && &'包含窗口(me.hwnd or desktop).
& && && && && && && && && && && && &&&
& &End With
& &Select Case TimedMessageBoxH(cmp)
& && &Case IDSELECT: Text1.Text = &在 timeout 前 选择 按钮被按下&
& && &Case IDBEGIN:&&Text1.Text = &按下 开始 或者 timeout &
& && &Case IDSKIP:& &Text1.Text = & timeout 前 按下 跳过 &
& &End Select
& &&&
End Sub
Private Sub Timer1_Timer()
& &Dim hWndTargetBtn As Long
& &
& &If hwndMsgBox && 0 Then
& &
& &&&'计数
& && &cmp.dwTimerCountDown = cmp.dwTimerCountDown + 1
& &&&'更新提示计时信息
& && &SetDlgItemText hwndMsgBox, IDPROMPT, _
& && && && && && && &&要马上执行,选择开始.& & vbCrLf & _
& && && && && && && &&或点击选择.& & vbCrLf & vbCrLf & _
& && && && && && && &&将在 & & _
& && && && && && && &CStr(3 - cmp.dwTimerCountDown) & & 秒后自动执行&
& && && && && && && && && &&&
& &&&'如果倒计时完毕,要模拟点击
& && &If cmp.dwTimerCountDown = cmp.dwTimerDuration Then
& && &
& && &&&'停止timer
& && && &Timer1.Enabled = False
& && && &
& && &&&'获取按钮句柄
& && && &hWndTargetBtn = GetDlgItem(hwndMsgBox, cmp.dwTimerExpireButton)
& && && &
& && && &If hWndTargetBtn && 0 Then
& && && &
& && && &&&'在按钮上设置焦点
& && && && &Call PutFocus(hWndTargetBtn)
& && && &&&
& && && &&&'给PutFocus时间
& && && && &DoEvents
& && && && &
& && && &&&'模拟点击
& && && && &Call PostMessage(hWndTargetBtn, WM_LBUTTONDOWN, 0, ByVal 0&)
& && && && &Call PostMessage(hWndTargetBtn, WM_LBUTTONUP, 0, ByVal 0&)
& && && &
& && && &End If
& && && &
& && &End If
& && && && && && && && && && && && && &
& &End If
& &
End Sub
复制代码
Option Explicit
'事件使用
Public hwndMsgBox As Long
'自定义用户类型,传递一堆参数
Public Type CUSTOM_MSG_PARAMS
& &hOwnerThread& && && &As Long
& &hOwnerWindow& && && &As Long
& &dwStyle& && && && &&&As Long
& &bUseTimer& && && && &As Boolean
& &dwTimerDuration& && &As Long
& &dwTimerInterval& && &As Long
& &dwTimerExpireButton&&As Long
& &dwTimerCountDown& &&&As Long
& &sTitle& && && && && &As String
& &sPrompt& && && && &&&As String
End Type
Public cmp As CUSTOM_MSG_PARAMS
'常数
Public Const MB_ICONINFORMATION As Long = &H40&
Private Const MB_ABORTRETRYIGNORE As Long = &H2&
Private Const MB_TASKMODAL As Long = &H2000&
'Windows& &MessageBox 返回值
Private Const IDOK = 1
Private Const IDCANCEL = 2
Private Const IDABORT = 3
Private Const IDRETRY = 4
Private Const IDIGNORE = 5
Private Const IDYES = 6
Private Const IDNO = 7
'这部分有用户自定义常量,来表示按钮的动作,在现有的MessageBox常量的基础上
Public Const MB_SELECTBEGINSKIP As Long = MB_ABORTRETRYIGNORE
Public Const IDSELECT = IDABORT
Public Const IDBEGIN = IDRETRY
Public Const IDSKIP = IDIGNORE
Public Const IDPROMPT = &HFFFF&
'其它api常数
Private Const WH_CBT = 5
Private Const GWL_HINSTANCE = (-6)
Private Const HCBT_ACTIVATE = 5
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
'用户自定义类型在hook时传递数据。
Private Type MSGBOX_HOOK_PARAMS
& &hwndOwner& &As Long
& &hHook& && & As Long
End Type
'变量
Private MHP As MSGBOX_HOOK_PARAMS
Private Declare Function GetCurrentThreadId Lib &kernel32& () As Long
Public Declare Function GetDesktopWindow Lib &user32& () As Long
Private Declare Function GetWindowLong Lib &user32& _
& &Alias &GetWindowLongA& _
&&(ByVal hwnd As Long, _
& &ByVal nIndex As Long) As Long
Public Declare Function GetDlgItem Lib &user32& _
&&(ByVal hDlg As Long, _
& &ByVal nIDDlgItem As Long) As Long
& &
Private Declare Function MessageBox Lib &user32& _
& &Alias &MessageBoxA& _
&&(ByVal hwnd As Long, _
& &ByVal lpText As String, _
& &ByVal lpCaption As String, _
& &ByVal wType As Long) As Long
& &
Public Declare Function PostMessage Lib &user32& _
& &Alias &PostMessageA& _
&&(ByVal hwnd As Long, _
& &ByVal wMsg As Long, _
& &ByVal wParam As Long, lParam As Long) As Long
& && &
Public Declare Function PutFocus Lib &user32& _
& &Alias &SetFocus& _
&&(ByVal hwnd As Long) As Long
&&
Public Declare Function SetDlgItemText Lib &user32& _
& &Alias &SetDlgItemTextA& _
&&(ByVal hDlg As Long, _
& &ByVal nIDDlgItem As Long, _
& &ByVal lpString As String) As Long
& && &
Private Declare Function SetWindowsHookEx Lib &user32& _
& &Alias &SetWindowsHookExA& _
&&(ByVal idHook As Long, _
& &ByVal lpfn As Long, _
& &ByVal hmod As Long, _
& &ByVal dwThreadId As Long) As Long
& && &
Private Declare Function SetWindowText Lib &user32& _
& &Alias &SetWindowTextA& _
&&(ByVal hwnd As Long, _
& &ByVal lpString As String) As Long
Private Declare Function UnhookWindowsHookEx Lib &user32& _
& &(ByVal hHook As Long) As Long
& &&&
Public Function MsgBoxHookProc(ByVal uMsg As Long, _
& && && && && && && && && && & ByVal wParam As Long, _
& && && && && && && && && && & ByVal lParam As Long) As Long
& && &
&&'当message box 显示时,我们改变标题,提示信息和按钮caption
& &If uMsg = HCBT_ACTIVATE Then
& &
& &&&'在HCBT_ACTIVATE消息中,
& &&&'wparam参数是messagebox的句柄,在timer事件中需要使用
& && &hwndMsgBox = wParam
& && && && &&&
& &&&'设置message box的按钮caption
& && &SetDlgItemText wParam, IDSELECT, &选择..&
& && &SetDlgItemText wParam, IDBEGIN, &开始&
& && &SetDlgItemText wParam, IDSKIP, &跳过&
& && &
& &&&'脱钩
& && &UnhookWindowsHookEx MHP.hHook
& && && && && &
& &End If
& &
&&'正常处理继续
& &MsgBoxHookProc = False
End Function
Public Function TimedMessageBoxH(cmp As CUSTOM_MSG_PARAMS) As Long
& &Dim hInstance As Long
& &Dim hThreadId As Long
& &
&&'挂钩
& &hInstance = GetWindowLong(cmp.hOwnerThread, GWL_HINSTANCE)
& &hThreadId = GetCurrentThreadId()
&&'填写 MSGBOX_HOOK_PARAMS 结构值
&&'将hook设为其中一个参数,我们就能截获消息并能操作对话框。
& &With MHP
& && &.hwndOwner = cmp.hOwnerWindow
& && &.hHook = SetWindowsHookEx(WH_CBT, _
& && && && && && && && && && &&&AddressOf MsgBoxHookProc, _
& && && && && && && && && && &&&hInstance, hThreadId)
& &End With
& &
&&'设置倒计数 0
& &cmp.dwTimerCountDown = 0
& &
&&'如果bUseTimer, 那么就enable timer. 因为
&&'MessageBox API 和 MsgBox 类似,必须关闭才能执行下一条语句。
&&'对话框一显示,timer的事件就动态更新message box的显示
& &With Form1.Timer1
& && &.Interval = cmp.dwTimerInterval
& && &.Enabled = cmp.bUseTimer
& &End With
&&'调用 MessageBox API
&&
& &TimedMessageBoxH = MessageBox(cmp.hOwnerWindow, _
& && && && && && && && && && && &cmp.sPrompt, _
& && && && && && && && && && && &cmp.sTitle, _
& && && && && && && && && && && &cmp.dwStyle)
&&'timer不需要了
& &Form1.Timer1.Enabled = False
End Function
08:54 上传
点击文件名下载附件
4.1 KB, 下载次数: 399
原帖由 yidie 于
08:54 发表
倒计时可定制消息框
Option Explicit
Private Sub Command1_Click()
&&'显示message box,
&&'传递 CUSTOM_MSG_PARAMS结构
& &With cmp
& && &.sTitle = &倒计时 MessageBox Hoo ...
场面搞的太大了吧!!!要是我宁愿自己画一个窗体模拟msgbox了。
原帖由 yimins 于
10:04 发表
场面搞的太大了吧!!!要是我宁愿自己画一个窗体模拟msgbox了。
偶从来不用msgbox,那玩艺儿有时非常别扭,非常讨厌。
private sub timer1_time()
timer1.interval=1
Option Explicit
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 Declare Function FindWindow Lib &user32& Alias &FindWindowA& (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetParent Lib &user32& (ByVal hwnd As Long) As Long
Private Const WM_CLOSE = &H10
Private Sub Command1_Click()
Timer1.Interval = 3000
Timer1 = True
MsgBox &这个对话框如果没有人工干预,将在 3 秒后自动关闭。&, 48
Private Sub Timer1_Timer()
Dim i As Long
i = FindWindow(&#32770&, App.EXEName)
If GetParent(i) = hwnd Then SendMessage i, WM_CLOSE, 0, 0: MsgBox &我关了!我关了!!我关了!!!&
Timer1 = False
试试这个,将代码编译后运行
当然这是个简单的事例,更复杂的也有。只是在获取句柄和发送关闭时深化下即可
[ 本帖最后由 PctGL 于
12:23 编辑 ]
12:23 上传
点击文件名下载附件
888 Bytes, 下载次数: 348在技术的道路上,要学会学习和分享,让编程变得更快乐!
可设置指定时间自动消失的 MessageBox实现
本文主要是讲如何实现可设置指定时间自动消失的 MessageBox提示框ShowMessageBoxTimeout实现;
在开发客户端应用程序的时候,经常用得WinForm中MessageBox提示框。但是有时候还是满足不了一些用户要求,客户要求千奇百怪,例如客户需要做某些提示的时候,不去点击确定或取消的时候,等待一段时间自动消失,为此我们可以使用下面类来实现,采用 Thread.Sleep来关掉当前提示框,具体代码如下:
ShowMessageBoxTimeout实现
using System.Collections.G
using System.L
using System.T
using System.Runtime.InteropS
using System.Windows.F
using System.T
namespace Tools.App
public class ShowMsg
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern bool EndDialog(IntPtr hDlg, out IntPtr nResult);
public static void ShowMessageBoxTimeout(string text, string caption,
MessageBoxButtons buttons, int timeout)
ThreadPool.QueueUserWorkItem(new WaitCallback(CloseMessageBox),
new CloseState(caption, timeout));
MessageBox.Show(text, caption, buttons);
private static void CloseMessageBox(object state)
CloseState closeState = state as CloseS
Thread.Sleep(closeState.Timeout);
IntPtr dlg = FindWindow(null, closeState.Caption);
if (dlg != IntPtr.Zero)
EndDialog(dlg, out result);
ShowMessageBoxTimeout调用
//三个参数:1、文本提示,2、提示框标题,3、按钮类型,4、自动消失时间设置
ShowMsg.ShowMessageBoxTimeout("欢迎使用数据导出服务程序,本程序默认最小化到电脑托盘,1分钟后正式启动。",
"程序启动温馨提示-窗口1分钟内无操作会自动关闭", MessageBoxButtons.OK, 1000 * 60 * 1)
希望以上分享对初学朋友有些帮助,谢谢!
更多关注付义方技术博客:
或者直接用手机扫描二维码查看更多博文:
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 vbs msgbox 参数 的文章

 

随机推荐