请问有关click和mouseup事件的问题,也许问题不好解决,但是还是想试问一下?

gang75 2003-03-26 11:18:53
我在点击按钮时,首先执行的是click事件,由于click事件里有个循环,所以当我松开鼠标时,mouseup事件并没有反应,只有当执行完这个循环才响应这个事件

请问怎样解决这个问题,我要在松开鼠标时立即响应mouseup事件

我在循环中加了DoEvents还是没有用
...全文
182 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sean918 2003-03-27
  • 打赏
  • 举报
回复
按 northwolves(野性的呼唤) 的方法做

没有响应可能是因为你的 DoEvents 加的地方不对

贴代码出来最好
vbsunboy 2003-03-27
  • 打赏
  • 举报
回复
用timer,循环放在timer中,click启动,mouseup关闭
gang75 2003-03-27
  • 打赏
  • 举报
回复
用线程应该行,但是好像callback不是关键字
我不知道线程怎样用,谢谢告诉我
jamesfay 2003-03-27
  • 打赏
  • 举报
回复
>>用以下这两个sub可以知道,先是click然后再是mouseup,我认为消息就是这么响应的。Private Sub Command1_Click()
List1.AddItem "Click"
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.AddItem "Mouse Up"
End Sub

>>如果要人为地改变这个次序,可以写一个过程来实现click的代码,然后在mouseup中调用一下。比如:

Private Sub Clone_Command1_Click()
List1.AddItem "Click"
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.AddItem "Mouse Up"
Clone_Command1_Click
End Sub

>>还有一个稍微复杂点的方法,在click和mouseup中各加一个线程,大致如下:
sub click
启动thread 1
end sub

sub mouseup
启动thread 2
end sub

callback thread1
wait for thread 2的结束标志
action
clear thread2 的结束标志
end callback

callback thread2
设置thread2的启动标志
action
设置thread2的结束标志
end callback
lxcc 2003-03-27
  • 打赏
  • 举报
回复

Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
For i = 0 To 100
For j = 0 To 100
For k = 0 To 100
DoEvents
Next
Next
Next
MsgBox "hello"
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "ok"
End Sub '我的意思先出现 ok 后出现 hello
落伍者 2003-03-27
  • 打赏
  • 举报
回复

vb是单线程的,而Click 事件先于mouseup事件发生,所以,必然是
先执行了click中的所有操作再去执行mouseup的操作。
如果要想做到楼主的要求,可以用timer来做。

Private Sub Command1_Click()
Timer1.Interval = 1
Timer1.Enabled = True

End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Debug.Print "MouseUp"
End Sub

Private Sub Timer1_Timer()
Timer1.Enabled = fasle
For i = 1 To 100
For j = 1 To 100
DoEvents
Next j
Next i
Debug.Print "Click"
End Sub
可以看到运行后,先在debug窗口先输出 Mouseup, 然后才是click
gang75 2003-03-27
  • 打赏
  • 举报
回复
注意的是:我的CPU是1.2G,延迟差不多2秒左右
所以请根据你的电脑调节一下循环次数
gang75 2003-03-27
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
For i = 0 To 100
For j = 0 To 100
For k = 0 To 100
DoEvents
Next
Next
Next
MsgBox "hello"
End Sub

Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
MsgBox "ok"
End Sub '我的意思先出现 ok 后出现 hello
northwolves 2003-03-26
  • 打赏
  • 举报
回复
click事件--------->mousedown事件

7,763

社区成员

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

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