当鼠标从底部离开时,按钮不会隐藏

时间:2010-09-29 20:41:49

标签: vb.net events animation button

我有一个表单,我希望窗体最底部的按钮与边框没有间隙。这些按钮应为“自动隐藏”,因此它们仅在鼠标位于例如表格的下20个像素时显示。所以我使用MouseMove事件来触发它,如下面的代码。但是,如果鼠标将表单留在底部边缘(按钮所在的位置),则按钮显然会保留。但我希望他们隐藏起来。所以我需要为此目的通过其他事件隐藏按钮。因此我尝试将它们隐藏在表单的MouseLeave事件中。但这会使按钮无法点击并且处于不稳定状态,当鼠标滑过按钮时会闪烁。这是为什么?如何才能避免此问题才能获得此类自动隐藏功能?

  Private Sub ZgScale_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove

    If e.Y > Me.ClientSize.Height - 30 Then
        Button1.Visible = True
    Else
        Button1.Visible = False
    End If
End Sub

Private Sub ZgScale_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.MouseLeave
    Button1.Visible = False
End Sub

2 个答案:

答案 0 :(得分:2)

当鼠标不再直接在该控件(或表单)上时,将触发MouseLeave事件。
如果鼠标移动到子控件,则会触发该事件。

您需要检查表单上是否不再显示鼠标,如下所示:

If Not Me.ClientRectangle.Contains(Me.PointToClient(e.Location)) Then
    Button1.Visible = False
End If

编辑:已修复

答案 1 :(得分:1)

Windows为此方案内置了直接支持。也在Windows窗体和WPF中公开。获得MouseMove事件后,将控件上的Capture属性设置为True。这会强制所有鼠标消息定向到控件,即使鼠标移动到控制窗口之外。

一旦你看到它移出控制范围之外,将Capture设置为false并隐藏你的控件。请注意,当用户单击鼠标时会关闭捕获功能,因此您可能必须在之后重新打开它。虽然它应该是自动的,但您将获得另一个MouseMove事件。如果用户快速移动鼠标 ,则可能会失败。