2012-01-17 3 views
0

Итак, у меня есть панель, которая на мыши и мыши. Оставьте меня, чтобы изменить видимость некоторых элементов управления, которые состыкованы внутри него.Стоп «Ребенок» Элементы управления от фокусировки?

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

Есть ли способ, которым я могу сделать эту работу без необходимости кодировать эти два события для каждого элемента управления внутри панели?

Cheers :)

+0

Возможный дубликат [Панель не получает фокус] (http://stackoverflow.com/questions/3562235/panel-not-getting-focus) –

ответ

1

Интересная проблема. Если вы поместите Console.WriteLine в MouseEnter или MouseLeave, вы заметите, что когда ваша мышь перемещается по элементу управления, который скрывает, что заставляет мышь вернуться на панель, которая затем показывает элемент управления, который заставляет элемент управления скрывать ...

Единственный способ, которым я понял, как выполнить ваш запрос, - удалить события MouseEnter и MouseLeave. Затем я добавил событие MouseMove в форму, содержащую панель. Я также добавил событие MouseMove на панель. Оба события вызывают процедуру, которая проверяет координаты мыши, чтобы определить, находится ли она над панелью. Если процедура MouseCheck возвращает значение true, тогда отобразите элементы управления, а затем скройте их. Пример ниже - C#, но я уверен, что вы можете схватить идею.

private bool MouseCheck(Control ctl, Point point) 
    { 
     bool blnRet = false; 

     if (point.X < ctl.Left) 
     { 
      blnRet = false; 
     } 
     else if (point.X > ctl.Left + ctl.Width) 
     { 
      blnRet = false; 
     } 
     else if (point.Y < ctl.Top) 
     { 
      blnRet = false; 
     } 
     else if (point.Y > ctl.Top + ctl.Height) 
     { 
      blnRet = false; 
     } 
     else 
     { 
      blnRet = true; 
     } 

     return blnRet; 
    } 
Смежные вопросы