Распространение C# Mouse Leave Event - PullRequest
0 голосов
/ 06 апреля 2020

Я создаю c# Настольное приложение, и я создал пользовательский контроль, в котором есть кнопка, и я хочу, чтобы эта кнопка была видимой только тогда, когда я нахожусь внутри этого пользовательского элемента управления, но есть проблема:

При наведении курсора на кнопку внутри элемента управления мышью, это определяется как MouseLeave для usercontrol, что создает большую проблему.

Примечание: я не могу обработать даже MouseMove от родителя, потому что я буду есть много экземпляров этого пользовательского элемента управления, поскольку каждый пользовательский элемент управления работает как строка внутри таблицы.

1 Ответ

1 голос
/ 06 апреля 2020

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

Следующий вспомогательный метод скажет нам, находится ли указатель мыши над элементом управления (будь то UserControl или стандартный элемент управления)

private bool IsMouseOver(Control control)
{
    return control.ClientRectangle.Contains(control.PointToClient(MousePosition));
}

Протестировав возвращаемое значение этого метода, мы можем определить в событии MouseLeave, что мышь все еще находится над нашим пользовательским элементом управления, и соответственно управлять видимостью кнопки:

private void UserControl1_MouseLeave(object sender, EventArgs e)
{
    if (!IsMouseOver(this))
    {
        button1.Visible = false;
    }
}

private void UserControl1_MouseEnter(object sender, EventArgs e)
{
    if (IsMouseOver(this))
    {
        button1.Visible = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...