Rom*_*ias 0 .net vb.net mouseleave winforms
我有一个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
Run Code Online (Sandbox Code Playgroud)
有问题的事件处理程序:
Private Sub NodoEstablo_MouseLeaves(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
Me.pictAdd.Visible = False
End Sub
Run Code Online (Sandbox Code Playgroud)
更新:如果我在MouseLeave上调整图片框的大小(只是为了做某事)它可以工作.到目前为止,在MouseLeave中更改Visible和Location会阻止我单击图片框.:S
当鼠标移动到按钮上时,会出现类似以下情况:
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
Run Code Online (Sandbox Code Playgroud)
这会检查以确保鼠标实际上已经离开控件,然后按钮消失.
改变图片框的大小可能已经打破了上面概述的周期,但它没有解决根本问题.
以下是一些需要考虑的其他事情(与您的问题无关):
OnMouseLeavesusercontrol中的etc等方法,而不是订阅相应的事件.