用户控件中的Click事件,该如何解决

用户控件中的Click事件
本帖最后由 bcrun 于 2013-10-28 08:21:33 编辑

用户控件窗体中放两个控件一个是图片Picture1和Label1控件,当鼠标点击Picture1或Label1中执行Click()事件
用户控件中的Click事件,该如何解决
'事件声明:鼠标点击事件
Public Event Click()

Private Sub Label1_Click()
RaiseEvent Click
End Sub

Private Sub Picture1_Click()
RaiseEvent Click
End Sub


运行后第一次鼠标点击到Label1控件上无效没有执行ClicK事件,再连续点击第二次才会执行有效。这是什么原因?
用户控件中的Click事件

------解决方案--------------------
本帖最后由 bcrun 于 2013-10-28 10:14:08 编辑
引用:
查出问题了,我加了一个鼠标离开事件的判断后 造成这种问题的,请看完整代码
...


如果把Picture1_MouseMove事件的代码屏蔽掉后就是正常的(第一次运行鼠标放在Label1上面点击是没有反应的)

请把我改下代码  谢谢


不对啊,我测试了,无论是否屏蔽,点击都正常反应。会不会你还有藏匿的代码“忘记”贴上来?
------解决方案--------------------
你的那个 Picture1_MouseMove() 中去 SetCapture 确实造成影响。

我建议你这样改一下,基本上,这样的效果还是跟 Picture1_Click() 一样。
并且还没那种“直接移到Label上第一次点击没反应”的问题。
'Private Sub Picture1_Click()
'   RaiseEvent Click
'End Sub
'
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
   If (Button = 1) Then RaiseEvent Click
End Sub

------解决方案--------------------
没有出现LZ说的问题,如果LZ的代码确实有问题,那肯定是出现在
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)   If 0 <= X And X <= Picture1.Width And 0 <= Y And Y <= Picture1.Height Then     SetCapture Picture1.hwnd           If Val(ys) < 1 Then        ys = Val(ys) + 1           '鼠标移出         End If  Else     ReleaseCapture         '鼠标移入           ys = 0   End IfEnd Sub 

上,lz可以判断是否进入或离开Picture1的时候,加入边缘保证,即
If dx <= X And X <= Picture1.Width-dx*2.... 以确保能ReleaseCapture