MouseHover и MouseLeave не работают, когда элемент управления невидим - PullRequest
1 голос
/ 29 июня 2011

Почему-то функции MouseHover и MouseLeave ведут себя очень странно. Все, что мне нужно сделать, это когда курсор находится над «кнопкой», я хочу сделать кнопку видимой, а когда курсор покидает кнопку, я хочу сделать ее невидимой. Что бы я ни пытался, я не мог заставить это работать. Кажется, что события мыши не работают, когда объект управления невидим.

private void button1_MouseHover(object sender, EventArgs e)
{
   button1.Visible = true;
}

private void button1_MouseLeave(object sender, EventArgs e)
{
    button1.Visible = false;
}

Ответы [ 4 ]

8 голосов
/ 29 июня 2011

Ну ... вот как это работает. Продолжите обрабатывать событие кнопки MouseLeave и обрабатывать MouseMove для ее родителя (я предполагаю форму):

private void Form_MouseMove(object sender, MouseEventArgs e) {
    if (button1.Bounds.Contains(e.Location) && !button1.Visible) {
        button1.Show();
    }
}
2 голосов
/ 29 июня 2011

Поместите кнопку на Panel, который имеет размеры и расположен так, чтобы точно содержать кнопку. Затем зацепите MouseEnter и MouseLeave на панели. Показать / скрыть кнопку; оставить панель всегда видимой, чтобы она могла получать события мыши.

1 голос
/ 29 июня 2011

Как следует из краткого комментария, невидимые объекты не распознаются мышью, потому что их "не существует".

0 голосов
/ 29 июня 2011

Вот как это работает; невидимые элементы управления не реагируют на события мыши.

Как насчет пересмотра вашего дизайна? Невидимый элемент управления, который появляется только тогда, когда мышь прокручивается над ним, просто кричит «трудно использовать». Я мог понять несколько дочерних элементов управления, появляющихся при наведении курсора на родительский контейнер или элемент управления, но не одинокую кнопку, невидимую до тех пор, пока ее не обнаружил просто по счастливой случайности. Вы всегда можете просто обернуть кнопку в другом контейнере и обработать события мыши контейнера.

...