Подтвердить что ты не робот

В чем разница между событиями 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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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