MouseHover и MouseLeave не работают, когда элемент управления невидим

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

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

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

person k787    schedule 28.06.2011    source источник
comment
См.: blogs.msdn.com/b/oldnewthing /архив/2006/03/23/558887.aspx   -  person Ed S.    schedule 29.06.2011


Ответы (4)


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

private void Form_MouseMove(object sender, MouseEventArgs e) {
    if (button1.Bounds.Contains(e.Location) && !button1.Visible) {
        button1.Show();
    }
}
person Ry-♦    schedule 28.06.2011

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

person Joe White    schedule 28.06.2011

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

person MickeyfAgain_BeforeExitOfSO    schedule 28.06.2011

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

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

person Ed S.    schedule 28.06.2011