2010-04-23 18 views
24

Questa potrebbe essere una domanda di base, ma devo ammettere che non ho mai veramente capito quale sia la differenza tra gli eventi Control.Enter e Control.GotFocus.Qual è la differenza tra gli eventi Control.Enter e 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

Si tratta di una differenziazione tra la cattura tastiera o il mouse o qualcos'altro?

risposta

18

Gli eventi di GotFocus/LostFocus sono generati dai messaggi di Windows, rispettivamente WM_SETFOCUS e WM_KILLFOCUS. Sono un po 'fastidiosi, specialmente WM_KILLFOCUS che è soggetto a deadlock. La logica all'interno di Windows Form che gestisce la logica di convalida (ad esempio la convalida dell'evento) può ignorare le modifiche al focus. In altre parole, l'attenzione è stata effettivamente cambiata, ma poi il codice di validazione lo ha spostato indietro. Lo stato logico dell'interfaccia utente è che non si è mai spostato e non dovresti essere consapevole del fatto.

Gli eventi di inserimento/uscita evitano il tipo di problema che questi eventi di notifica di modifica dello stato attivo a basso livello possono causare, vengono generati quando Winforms ha stabilito il vero fuoco. Hai quasi sempre voglia di usarli.

3

L'evento Control.Enter si verifica quando un controllo ottiene la messa a fuoco per la prima volta. Mentre Control.GotFocus accade ogni volta che un controllo diventa attivo. Ad esempio, hai "textBox1" che ha già lo stato attivo e chiami textBox1.Focus(), l'evento GotFocus verrà sempre attivato in questa istanza, diversamente dall'evento Enter che verrà attivato solo se un controllo non ha già lo stato attivo e lo riceve per la prima volta.

Problemi correlati