2010-04-23 6 views
24

Это может быть основной вопрос, но я должен признать, что я никогда не понимал, какова разница между событиями Control.Enter и Control.GotFocus.В чем разница между событиями Control.Enter и Control.GotFocus?

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.enter.aspx http://msdn.microsoft.com/en-us/library/system.windows.forms.control.gotfocus.aspx

ли это различие между захвата клавиатуры или мыши или что-то еще?

ответ

18

События GotFocus/LostFocus генерируются сообщениями Windows, WM_SETFOCUS и WM_KILLFOCUS соответственно. Они немного хлопотливы, особенно WM_KILLFOCUS, который подвержен тупиковой ситуации. Логика внутри Windows Forms, которая обрабатывает логику проверки (например, подтверждение события), может переопределить изменения фокуса. Другими словами, фокус фактически изменился, но тогда код проверки вернул его. Логическое состояние вашего пользовательского интерфейса состоит в том, что он никогда не перемещался, и вы не должны знать, что это так.

События ввода/опускания предотвращают возникновение проблем, которые могут вызывать эти события уведомления об изменении фокуса низкого уровня, они генерируются, когда Winforms установил истинную фокусировку. Вы почти всегда хотите использовать их.

3

Событие Control.Enter происходит, когда элемент управления получает фокус в первый раз. В то время как Control.GotFocus происходит КАЖДЫЙ раз, управление получает фокус. Например, у вас есть «textBox1», который уже имеет фокус, и вы вызываете textBox1.Focus(), событие GotFocus всегда запускается в этом экземпляре, в отличие от события Enter, которое будет срабатывать только в том случае, если элемент управления еще не имеет фокуса и получает его в первый раз.

Смежные вопросы