2010-04-23 6 views
24

Cela peut être une question de base, mais je dois admettre que je n'ai jamais vraiment compris quelle est la différence entre les événements Control.Enter et Control.GotFocus.Quelle est la différence entre les événements Control.Enter et 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

est-il une différence entre la capture clavier ou de la souris ou autre chose?

Répondre

18

Les événements GotFocus/LostFocus sont générés respectivement par des messages Windows, WM_SETFOCUS et WM_KILLFOCUS. Ils sont un peu gênants, en particulier WM_KILLFOCUS qui est enclin à l'impasse. La logique dans Windows Forms qui gère la logique de validation (événement Validating par exemple) peut remplacer les modifications de focus. En d'autres termes, le focus a réellement changé, mais le code de validation l'a ensuite déplacé. L'état logique de votre interface utilisateur est qu'elle n'a jamais bougé et que vous ne devez pas savoir que c'est le cas. Les événements Enter/Leave évitent le genre de problèmes que ces événements de notification de modification de focus de bas niveau peuvent provoquer, ils sont générés lorsque Winforms a défini le véritable focus. Vous voulez presque toujours les utiliser.

3

L'événement Control.Enter se produit lorsqu'un contrôle obtient le focus pour la première fois. Alors que Control.GotFocus arrive à chaque fois qu'un contrôle obtient le focus. Par exemple, 'textBox1' qui a déjà le focus et vous appelez textBox1.Focus(), l'événement GotFocus se déclenchera toujours dans cette instance, contrairement à l'événement Enter qui ne se déclenchera que si un contrôle n'a pas déjà le focus et le reçoit pour la première fois.

Questions connexes