2013-03-05 3 views
1

У меня есть панель с двумя кнопками на ней. То, что я пытаюсь сделать, - это когда мышь находится внутри области панели, тогда кнопки видны, и когда местоположение мыши находится за пределами области панели, кнопки не видны.WinForms C# Видимость кнопки

Я использую события MouseEnter и MouseLeave на панели.

MouseEnter i do button.Show() и по MouseLeave i do button.Hide();

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

Некоторые отладки показывают, что когда мышь над кнопкой, события MouseEnter и MouseLeave постоянно вызывают.

Любые предложения по этому вопросу? Это должно быть так легко сделать, что я на самом деле без идей.

+0

Попробуйте добавить button.Enabled = истина; – abc

+0

Забудьте сказать, что кнопка включена, также является 'MouseEnter'. – guanabara

ответ

4

Это происходит потому, что, когда ваша мышь находится над какой-либо кнопкой, событие MouseLeave запускается на панели, поэтому кнопки снова невидимы, а мышь снова появляется на панели, таким образом стреляя сразу MouseEnter и показывая их обратно.

Исправить вашу логику, добавив флаг, который проверяет событие MouseLeave, если вы находитесь на любом элементе управления, принадлежащем этой панели, если это не скроет их.

Редактировать: здесь у вас есть пример, чтобы исправить вашу проблему - MouseEnter and MouseLeave events from a Panel and its child controls.

0

Вот решение, представленное в другой теме, упомянутой на gzaxx

protected override void OnMouseLeave(EventArgs e) 
     { 
      if (this.ClientRectangle.Contains(this.PointToClient(Control.MousePosition))) 
       return; 
      else 
      { 
       base.OnMouseLeave(e); 
      } 
     } 
Смежные вопросы