В чем разница между событиями Control.Enter и Control.GotFocus? - PullRequest
28 голосов
/ 24 апреля 2010

Это может быть основной вопрос, но я должен признать, что никогда не понимал, в чем разница между событиями 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

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

Ответы [ 2 ]

21 голосов
/ 24 апреля 2010

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

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

4 голосов
/ 08 апреля 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...