2010-04-23 12 views
24

Dies mag eine grundlegende Frage sein, aber ich muss zugeben, dass ich nie wirklich verstanden habe, was der Unterschied zwischen den Ereignissen Control.Enter und Control.GotFocus ist.Was ist der Unterschied zwischen den Ereignissen Control.Enter und 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

Ist es eine Differenzierung zwischen Erfassung Tastatur- oder Mauseingabe oder etwas anderes?

Antwort

18

Die GotFocus/LostFocus-Ereignisse werden von den Windows-Nachrichten WM_SETFOCUS bzw. WM_KILLFOCUS generiert. Sie sind ein wenig mühsam, vor allem WM_KILLFOCUS, die anfällig für Deadlock ist. Die Logik in Windows Forms, die die Validierungslogik (z. B. Validierungs-Ereignis) verarbeitet, kann Fokusänderungen überschreiben. Mit anderen Worten, der Fokus hat sich tatsächlich geändert, aber dann hat der Validierungscode ihn zurückbewegt. Der logische Status Ihrer Benutzeroberfläche besteht darin, dass sie sich nie verschoben hat und Sie sollten nicht wissen, dass dies der Fall ist.

Die Enter/Leave-Ereignisse vermeiden die Art von Problemen, die diese Low-Level-Fokusänderung Benachrichtigungsereignisse verursachen können, sie werden generiert, wenn WinForms den wahren Fokus festgelegt hat. Sie möchten diese fast immer verwenden.

3

Das Control.Enter-Ereignis tritt auf, wenn ein Steuerelement zum ersten Mal den Fokus erhält. Während Control.GotFocus JEDER Zeit passiert, erhält ein Steuerelement den Fokus. Wenn Sie beispielsweise "textBox1" bereits im Fokus haben und textBox1.Focus() aufrufen, wird das GotFocus-Ereignis in diesem Fall immer ausgelöst, anders als beim Enter-Ereignis, das nur ausgelöst wird, wenn ein Steuerelement nicht bereits den Fokus hat und empfängt es zum ersten Mal.

Verwandte Themen