Wie Sie verhindern, dass der Wert geändert Ereignissen von brennen auf der form-Initialisierung .NET?

Betrachten Sie eine einfache .NET-Formular mit ein paar radio-buttons und eine checkbox.

Einzelnen radio-buttons hat eine CheckedChanged-handler-setup, führt einige Aktionen basierend auf dem Status der checkbox.

Mein problem ist, wenn ich initialisieren auf Standard-radiobutton aktiviert sein (aus dem designer-Fenster Eigenschaften) das CheckedChanged-Ereignis ausgelöst wird für das radio-button, aber die Checkbox noch nicht initialisiert wurde, aber ich erhalte entweder eine null-Zeiger-Ausnahme oder der falsche Wert wird verwendet in der hf. So oder so, ich will nicht, dass die handler-code ausgeführt werden, es sei denn, der Benutzer wählt einen radio-Taste, nachdem die form geladen wurde.

Ich derzeit dies umgehen, indem nicht die Initialisierung der radio Buttons, aber muss ich das einstellen, dass standardmäßig schließlich, und der beste Ort ist von dem designer. Ich kann auch hinzufügen, ein boolean Feld, das nicht auf true gesetzt, bis das Formular vollständig geladen ist und nicht die Verarbeitung der Ereignisse, wenn das falsch ist, aber es ist ein schmutziger hack.

Was kann ich tun, um zu verhindern, dass die Prozedur ausgeführt seinen code?

Dies ist ein klarer Visual Studio Fehler, meiner Meinung nach. Settign eine Initialisierungs-flag (wie in x77 Antwort) ist die einfachste Lösung, aber es SOLLTE aufgepasst werden durch den compiler.
Es ist eine bekannte bug/feature. Wenn Sie ein upgrade von VB6-Projekt VB.NET über die integrierte upgrade-Tools in VS, es tatsächlich fügt UPGRADE_WARNING Kommentare für diesen bei diesen Veranstaltungen. ('UPGRADE_WARNING: Event TextBox1.TextChanged may fire when form is initialized.)
Und für die Nachwelt, in dem MSDN-Artikel auf, wie mit der Warnung zitiert in @awe Kommentar: msdn.microsoft.com/en-us/library/26aab97z%28v=vs.71%29.aspx: IsInitializing "true im Formular-Konstruktor nur vor dem InitializeComponent - Aufruf; stellen Sie es auf false unmittelbar nach dem Anruf."

InformationsquelleAutor CodeFusionMobile | 2010-06-30

Schreibe einen Kommentar