我有一个userControl(.NET 1.1 Winforms),它有一个可点击的图片框作为按钮。
由于我同时可以看到很多这样的用户控件,我想如果我只是在鼠标悬停在用户控件上时显示图片框并且隐藏它,那就太好了。
为此,我处理UserControl的MouseEnter和MouseLeave事件,隐藏并显示图片框。这很好。
但是当可点击的图片框可见时,我再也无法点击它(手形光标消失了,点击事件也没有开始)。
经过一些测试后,我意识到如果对MouseLeave处理程序中的所有内容进行评论,这些内容与我的图片框有关......这样,图片框就是可点击的。
我没有使用正确的活动?
还有另一种方法可以实现这一目标吗?
这是代码......
Private Sub NodoEstablo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.pictAdd.Visible = False
End Sub
Private Sub NodoEstablo_MouseEnters(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseEnter
Me.pictAdd.Visible = True
End Sub
有问题的事件处理程序:
Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
Me.pictAdd.Visible = False
End Sub
更新: 如果我在MouseLeave上调整图片框的大小(只是为了做某事)就行了。 到目前为止,在MouseLeave中更改Visible和Location会阻止我单击图片框。 :S
答案 0 :(得分:7)
当鼠标移动到按钮上时,会出现类似以下情况:
MouseLeave
事件处理程序触发,使图片框不可见MouseEnter
事件处理程序触发,使图片框可见当我测试你的代码时,“按钮”不断地闪烁(因为它保持其可见性切换)并且无法保持足够长的时间来记录任何点击。
解决此问题的一种方法是将MouseLeaves
处理程序修改为:
Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles MyBase.MouseLeave
If Not ClientRectangle.Contains(PointToClient(Cursor.Position)) Then
Me.pictAdd.Visible = False
EndIf
End Sub
这会检查以确保鼠标实际上已经离开控件,然后按钮消失。
更改图片框的大小可能会破坏上面概述的周期,但它没有解决根本问题。
以下是一些需要考虑的其他事情(与您的问题无关):
OnMouseLeaves
等方法,而不是订阅相应的事件。