Получение панели внутри панели с позицией мыши

Я искал эту вещь... Она должна работать, но это не так. Должно быть что-то, чего я не понимаю или чего мне не хватает. Это довольно простая проблема, но я не могу ее решить.

Я получил Panel1 и Panel2, как показано на этом рисунке.

Я хочу поймать, когда мышь находится над Panel2 в событии Panel1 MouseLeave. Мой код выглядит так:

Private Sub Panel1_MouseLeave(sender As Object, e As EventArgs) Handles Panel1.MouseLeave

    If sender.ClientRectangle.Contains(PointToClient(Control.MousePosition)) Then
        For Each ctrl As Object In sender.controls
            If ctrl.ClientRectangle.Contains(PointToClient(Control.MousePosition)) Then Exit Sub
        Next
        If Not IsNothing(sender.BackgroundImage) Then sender.BackgroundImage = Nothing
    End If

End Sub

Private Sub Panel2_MouseLeave(sender As Object, e As EventArgs) Handles Panel2.MouseLeave

    If Not sender.ClientRectangle.Contains(PointToClient(Control.MousePosition)) Then
        If Not IsNothing(sender.BackgroundImage) Then sender.BackgroundImage = Nothing
    End If

End Sub

Я успешно вхожу в первое "если", но второе в "Для каждого" никогда не будет равным истине. Поэтому я подумал, что может быть проблема со 2-й панелью, поэтому я попытался разместить тот же код для Panel2 MouseLeave, но он работает просто отлично.

Мне действительно нужен этот код для работы с большой проблемой мерцания элемента управления, которая у меня возникла.

1 ответ

Решение

Спасибо Гансу Пассанту за подсказку. Мне просто нужно было вызвать PointToClient с правильным управлением:

Private Sub Panel1_MouseLeave(sender As Object, e As EventArgs) Handles Panel1.MouseLeave

    If sender.ClientRectangle.Contains(Panel1.PointToClient(Control.MousePosition)) Then
        For Each ctrl As Object In sender.controls
            If ctrl.ClientRectangle.Contains(ctrl.PointToClient(Control.MousePosition)) Then Exit Sub
        Next
        If Not IsNothing(sender.BackgroundImage) Then sender.BackgroundImage = Nothing
    End If

End Sub
Другие вопросы по тегам