Кнопка не прячется, когда мышь уходит снизу - PullRequest
0 голосов
/ 30 сентября 2010

У меня есть форма, где я хочу кнопки в самом нижнем краю формы, без пропуска на границе.Эти кнопки должны быть автоматически скрыты, поэтому они отображаются, только когда мышь находится, например, в нижних 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 ]

2 голосов
/ 30 сентября 2010

Событие MouseLeave возникает, когда мышь больше не напрямую на этом элементе управления (или форме).
Если мышь переходит к дочернему элементу управления, событие срабатывает.

Вам необходимо проверить, не находится ли мышь на форме, например:

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

EDIT : исправлено

1 голос
/ 30 сентября 2010

Windows имеет прямую поддержку встроенную для этого сценария.Также выставлено в Windows Forms и WPF.Как только вы получите событие MouseMove, установите для свойства Capture элемента управления значение True.Это заставляет все сообщения мыши направляться на элемент управления, даже если мышь перемещается за пределы окна управления.

Как только вы увидите, что она выходит за пределы элемента управления, установите для Capture обратно значение false и скройте свой элемент управления.Остерегайтесь того, что захват отключается, когда пользователь щелкает мышью, поэтому вам, вероятно, придется включить его позже.Хотя это должно быть автоматически, вы получите еще одно событие MouseMove.Может произойти сбой, если пользователь перемещает мышь действительно быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...