在一个循环程序中使用了doevents,来交换主动权给系统!
现在遇到一个麻烦的问题:我的程序用来控制电机的行径,当我用鼠标左键点击窗口不放,似乎系统就响应了这个鼠标事件,而不继续执行我的程序,松开鼠标后它会继续执行!有什么办法,在我点击窗口不放时,程序继续执行。注:我发现定时器钟的程序还是可以走的,就是当前含有doevents的循环程序没有继续走。
现在遇到一个麻烦的问题:我的程序用来控制电机的行径,当我用鼠标左键点击窗口不放,似乎系统就响应了这个鼠标事件,而不继续执行我的程序,松开鼠标后它会继续执行!有什么办法,在我点击窗口不放时,程序继续执行。注:我发现定时器钟的程序还是可以走的,就是当前含有doevents的循环程序没有继续走。
在Form1上只有command1按钮和text1,代码:
sub command1_click()
do
doevents
sleep 100
a = a+1
text1.text=a
loop
end sub
大家可以试下,command1点击后,text1显示累加。当用鼠标点击窗体上方并且不放开,它就一直在doevents,而不会往下执行。同样,就算你在窗体上方点击鼠标右键,会显示什么:移动、关闭等等的那个菜单时,它依然不会往下执行。
上面有位大哥说屏蔽点击会不会影响拖动啊?也许可以解决这个问题!
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Dim a As Integer
Do
DoEvents
Sleep 100
a = a + 1
Text1.Text = a
Loop
End Sub为什么我测试却一点问题都没呢,唯一的一点就是卡....
按住标题栏计数会停下来,跟楼主描述的一样
可是你想过没,你的那个东西里 SLEEP 100 也就是每执行一次就会休眠100毫秒...你的TIMER如何能正确让他走呢... 你不如把这么个东西扔到TIMER里 TIMER 的中断设置成100 然后让它加... 一点问题都不会有了...当然还有... 能不能达到100毫秒还是个问题...
就好比 你跟一个人说好了... 如果我待会打牌去了,你就帮我做作业... 他做的好好的,但是你下场了
它就不做了,它就等你去打牌了再帮你做作业它就是一个替补队员而已... 昂德死蛋
Dim a As Integer
Form1.Enabled = False//=================那就不响应任何鼠标消息...咋样...你可以设计等到数字到你要的然后解除宵禁 Do
DoEvents
Sleep 100
a = a + 1
Text1.Text = a
Loop
End Sub
click事件,并不只是你按下鼠标,还得你放开鼠标才会触发,所以,你这个例子说明的问题是错误的,并且,我也推断你的实际程序也有同样的错误.
如果你想在鼠标按下的同时就开始执行动作,请使用MOUSEDOWN事件
我看错了,
楼主说的不是鼠标在按钮上,而是在标题栏上.这也不是VB或者DOEVENTS的错误.
请楼主做个试验就知道了, 在开机的时候, windows 的 exproler还未载入的时候,有一个带滚动条的小窗体在屏幕中间提示windows正在启动, 此时,你只要把鼠标点住这个窗体的标题栏不放.
然后,然后,然后,一直到你按得手酸, windows桌面也不会出来.SO, 改成无边框窗体吧.
再次谢谢各位!看看还有没有那位大哥来指点。
9楼:“是有此种情况发生,那就用多线程吧. ”,我相信可以解决,但是vb的多线程我不会。汗!!!而且听说vb6的多线程相当麻烦,不知哪位大哥指点1、2.
不过都有现成的封装,就是调试使用的时候要特别的注意一点
就好比 你跟一个人说好了... 如果我待会打牌去了,你就帮我做作业... 他做的好好的,但是你下场了
它就不做了,它就等你去打牌了再帮你做作业 它就是一个替补队员而已... 昂德死蛋