如何实现自动关闭Messagebox对话框

cuiwb770111 2005-12-22 04:29:26
请问各位如何实现自动关闭Messagebox对话框,我用VB6实现过,但现在在VB.NET中怎么试都没成功,请各位指教。
...全文
912 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnwd 2005-12-30
  • 打赏
  • 举报
回复
mark
清风树下 2005-12-30
  • 打赏
  • 举报
回复
做个记号
cuiwb770111 2005-12-29
  • 打赏
  • 举报
回复
谢谢pupo(泡泡),原来是我忘了加默认按钮选项了。
可是你的代码中:
If MsgBox("Retry or Cancel?", vbRetryCancel + vbDefaultButton1, "自动关闭") = vbRetry Then
MsgBox("Retry!")
Else
MsgBox("Cancel")
End If

End Sub
此段代码好像不是VB.NET代码吧。
cuiwb770111 2005-12-28
  • 打赏
  • 举报
回复
请问pupo(泡泡)你给的代码在你那儿好使吗?
怎么我这儿运行时不能正常关闭提示框呢,程序也走到TimerProc过程中了,提示框也找到了,但也就是不能正常关闭。
pupo 2005-12-28
  • 打赏
  • 举报
回复
好使,可以自动关闭
TSD 2005-12-28
  • 打赏
  • 举报
回复
用定时器的方法不是很简单吗?


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Timer1.Enabled = True
Dim r = MsgBox("hi.....................................", MsgBoxStyle.Information + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton1, "Hello")
MsgBox(r)

End Sub


Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

SendKeys.Send("{enter}")

End Sub

定时器认设置:

Timer1.enabled=false
Timer1.Interval=3000
cuiwb770111 2005-12-27
  • 打赏
  • 举报
回复
用窗体解决问题这个我知道,我就是想用messagebox来实现,我已经在VB6中做到了,但在VB.NET中却怎么也没做到。
在这里问各位高手有没有办法?
pupo 2005-12-27
  • 打赏
  • 举报
回复
Public Declare Function KillTimer Lib "user32" Alias "KillTimer" (ByVal hwnd As Integer, ByVal nIDEvent As Integer) As Integer
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Public Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Integer) As Integer
Public Declare Function SetTimer Lib "user32" Alias "SetTimer" (ByVal hWnd As Integer, ByVal nIDEvent As Integer, ByVal uElapse As Integer, ByVal lpTimerFunc As TimerProcHandler) As Integer

Public Const NV_CLOSEMSGBOX As Integer = &H5000

Public Delegate Sub TimerProcHandler(ByVal hWnd As Integer, ByVal uMsg As Integer, ByVal idEvent As Integer, ByVal dwTime As Integer)

Public Sub TimerProc(ByVal hWnd As Integer, ByVal uMsg As Integer, ByVal idEvent As Integer, ByVal dwTime As Integer)

KillTimer(hWnd, idEvent)

Select Case idEvent
Case NV_CLOSEMSGBOX
Dim hMessageBox As Integer
hMessageBox = FindWindow("#32770", "自动关闭")

If hMessageBox Then
Call SetForegroundWindow(hMessageBox)
SendKeys.Send("{enter}")
End If
End Select

End Sub

Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
SetTimer(Me.Handle.ToInt32, NV_CLOSEMSGBOX, 4000, AddressOf TimerProc)

If MsgBox("Retry or Cancel?", vbRetryCancel + vbDefaultButton1, "自动关闭") = vbRetry Then
MsgBox("Retry!")
Else
MsgBox("Cancel")
End If

End Sub
farrio 2005-12-27
  • 打赏
  • 举报
回复
关注的同时聊一下 jsjzzh(蚯蚓) 兄关于“调用WINDOWS API是用什么方法”的问题。
个人认为vb.net在调用windows api的时候是通过托管代码调用非托管库,有点像调用com组件一样。只不过调用com组件使用wrapped dll实现的,而使用api则是通过declare函数实现的。非托管代码的一些数据类型,比如指针则被managed code封装为托管的类型,比如intptr,来让vb.net使用。
jsjzzh 2005-12-27
  • 打赏
  • 举报
回复
我想来分析一下这个问题,不一定对的。

首先,我再网上找了一下你刚才说的资料,VB在实现这个功能的时候,不是用的自己的MSGBOX函数。而是调用系统的MessageBox(包含在Lib user32 下API函数)。而对于关闭,只不过是在什么时候传什么参数的问题。我感觉这个更接近VC。

再说一下VB.NET。能不能实现我现在也不确定,不过这让我想到了VC.NET的托管和非托管方式的编程方式。VB.NET现在的方式应该是托管方式下的,而其调用WINDOWS API是用什么方法。我现在也不太清楚。关注中。
cuiwb770111 2005-12-27
  • 打赏
  • 举报
回复
本人是在VB技术论坛中找的资料,它是通过调用API函数来实现的。
在VB中关闭提示框用的就是Call SendMessage(hMessageBox, WM_CLOSE, 0, ByVal 0&)
hMessageBox是提示框的窗口句柄
可是在VB.NET中就是不好使,提示框的窗口句柄也找到了,但是用这条语句就是不行。
jsjzzh 2005-12-27
  • 打赏
  • 举报
回复
能不能把你在VB6实现的方法说一下是如何实现的,为什么.NET不可以呢。
悄悄的回来了 2005-12-23
  • 打赏
  • 举报
回复
用个窗体来当MESSAGEBOX就行了,弄个时钟控件在窗体上就行了!

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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