VB.NET 2003: Unterschied zwischen GotFocus/LostFocus und Enter/Leave?

Antwort vom

**Kurz gesagt: In VB.NET 2003 solltest du für Windows-Forms fast immer `Enter`/`Leave` verwenden, nicht `GotFocus`/`LostFocus`. `GotFocus` und `LostFocus` sind niedrigere, technischere Fokus-Events; `Enter` und `Leave` verhalten sich im UI-Alltag sauberer und sind dafür gedacht.** ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.lostfocus?view=windowsdesktop-9.0)) ## Der praktische Unterschied `Enter` bedeutet: Das Steuerelement wird im Rahmen der Formular-Navigation „betreten“. `GotFocus` bedeutet: Das Steuerelement hat den Windows-Fokus tatsächlich erhalten. `Leave` bedeutet: Das Steuerelement wird verlassen. `LostFocus` bedeutet: Der technische Fokus ist weg. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/desktop/winforms/order-of-events-in-windows-forms)) Die wichtige Konsequenz: `Enter`/`Leave` sind für typische UI-Logik wie Hervorheben, Hilfetexte, Vorbelegung oder einfache Reaktionen beim Betreten/Verlassen eines Felds die bessere Wahl. `GotFocus`/`LostFocus` sind eher Low-Level-Events und führen schneller zu unerwartetem Verhalten. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.lostfocus?view=windowsdesktop-9.0)) ## Warum das in der Praxis relevant ist Der entscheidende Unterschied ist die Ereignis-Reihenfolge, und die ist je nach Art des Fokuswechsels nicht immer gleich. Bei Tastatur-Navigation per Tab ist die Reihenfolge: `Enter` → `GotFocus` → `Leave` → `Validating` → `Validated` → `LostFocus`. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/desktop/winforms/order-of-events-in-windows-forms)) Bei Mauswechsel oder `Focus()` ist die Reihenfolge: `Enter` → `GotFocus` → `LostFocus` → `Leave` → `Validating` → `Validated`. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/desktop/winforms/order-of-events-in-windows-forms)) Das ist der Punkt, an dem viele Fehler entstehen: Wer Validierung oder Zustandswechsel an `LostFocus` hängt, bekommt je nach Navigation ein anderes Verhalten. `Leave` ist dafür meist robuster. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/desktop/winforms/order-of-events-in-windows-forms)) ## Wichtiger Sonderfall `Enter`/`Leave` sind hierarchisch. Wenn du dich z. B. zwischen Controls in verschiedenen `GroupBox`en bewegst, können die Events auch entlang der Container-Kette ausgelöst werden. `GotFocus`/`LostFocus` beziehen sich dagegen direkter auf den eigentlichen Fokuswechsel des Controls. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.leave?view=windowsdesktop-9.0)) Außerdem gilt für `Form`: Dort sind `Enter`/`Leave` nicht das passende Gegenstück; stattdessen verwendet man `Activated`/`Deactivate`. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.leave?view=windowsdesktop-9.0)) ## Klare Empfehlung Wenn du in VB.NET 2003 einfach wissen willst, **wann ein Eingabefeld betreten oder verlassen wird**, nimm `Enter` und `Leave`. Wenn du **bewusst auf den niedrigen Windows-Fokus** reagieren musst, kannst du `GotFocus` und `LostFocus` verwenden — aber das ist der Ausnahmefall, nicht der Standard. ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.lostfocus?view=windowsdesktop-9.0)) Ein typischer Merksatz ist: - **UI-Logik:** `Enter` / `Leave` - **technischer Fokus:** `GotFocus` / `LostFocus` ([learn.microsoft.com](https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.control.lostfocus?view=windowsdesktop-9.0))

Kategorie: Technik Tags: Vbnet Focus Events

Verwandte Fragen

VB.NET 2003: GotFocus/LostFocus oder Enter/Leave?

Use Enter/Leave for normal WinForms code; GotFocus/LostFocus are lower-level Windows message events and are usually the wrong choice. Microsoft explicitly recommends Enter/Leave for controls, while Go...