代码之家  ›  专栏  ›  技术社区  ›  Romias

.NET UserControl的鼠标删除异常行为

  •  0
  • Romias  · 技术社区  · 17 年前

    我有一个用户控件(.NET 1.1 Winforms),它有一个可单击的图片框作为按钮。

    因为我有很多用户控件同时可见,所以我认为如果我在鼠标悬停在用户控件上时显示图片框,然后隐藏它会很好。

    为此,我处理UserControl的MouseEnter和MouseLeave事件,隐藏和显示picturebox。那很好。

    经过一些测试,我意识到如果对MouseLeave处理程序中与我的picturebox相关的所有内容进行注释。。。这样就可以单击picturebox。

    还有别的办法吗?

    这是代码。。。

    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上调整picturebox的大小(只是为了做点什么),它会工作。 到目前为止,更改鼠标中的可见和位置会阻止我单击图片框:s

    1 回复  |  直到 17 年前
        1
  •  7
  •   Daniel LeCheminant    17 年前

    当鼠标移到按钮上时,会发生类似以下情况:

      • 你的 MouseLeave 事件处理程序激发,使picturebox不可见
      • 你的 MouseEnter
    1. 由于picturebox现在可见,因此该过程从头开始

    当我测试代码时,“按钮”不断闪烁(因为它的可见性一直处于切换状态),并且无法保持足够长的可见时间来注册任何点击。

    解决这个问题的一种方法是修改 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 ,etc方法,而不是订阅相应的事件。
    • 请记住,以这种方式处理控件可能会使某些人无法仅使用键盘来使用您的应用程序。(即用户不能 按一下你的按钮 进来 )
    推荐文章