vb 繁忙提示

SmartBeanDad 2014-07-12 06:55:53
我做的 VB 程序需要读取网络数据,但是有时如果网速太慢,要读取几分钟,并且程序处于假死状态,还会出现“白布”,
我想要做出一个提示框,在读取数据时提示用户 ”正在读取数据,请稍等。。。"
但是,我用 MsgBox 或者 小窗体 做这个提示框后,系统就停在提示语句哪里了,不继续往下运行了
这个是不是和进程有关?
我又用 Timer 控件试了一下,发现效果也不是太好,
请问这个问题的一般常用的比较成熟的解决方法是什么?谢谢!
...全文
218 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-07-14
  • 打赏
  • 举报
回复
关键是如何“读取网络数据”的?
该过程必须是异步的(不同进程),你的界面才能有响应。
of123 2014-07-14
  • 打赏
  • 举报
回复
MsgBox 可以用 Timer 关闭。但必须是在编译后的 exe 中。在 Debug 模式下是不行的。
'如何设定 MsgBox 在若干时间之后若无回应则自动关闭? 
 
'在我们的印象中,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 之后才有效!
我更常用的方式是,用一个 Label 显示等待提示,并将鼠标光标改为一个漏斗。操作完成时,用该 Label 显示完成,并使鼠标恢复正常。
赵4老师 2014-07-14
  • 打赏
  • 举报
回复
在读取网络数据中适当位置以适当频率调用DoEvents
一如既往哈 2014-07-12
  • 打赏
  • 举报
回复
用窗体做提示,读取完成后卸载提示窗体
threenewbee 2014-07-12
  • 打赏
  • 举报
回复
frm.Show VbModalLess 或者写 frm.Show 0

1,453

社区成员

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

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