Meine C # -Anwendung hat ein comboBox
mit einem SelectedIndexChanged
-Ereignis. Normalerweise möchte ich, dass dieses Ereignis ausgelöst wird, aber manchmal muss das Ereignis nicht ausgelöst werden. Meine comboBox
ist eine MRU-Dateiliste. Wenn eine Datei in der Liste nicht vorhanden ist, wird das Element aus comboBox
entfernt, und comboBox
SelectedIndex
wird auf Null gesetzt. Wenn Sie comboBox
SelectedIndex
jedoch auf Null setzen, wird das Ereignis SelectedIndexChanged
ausgelöst, was in diesem Fall problematisch ist, da einige UIF-Codes im Ereignishandler ausgeführt werden. Gibt es eine elegante Möglichkeit, Ereignisse für C # -Formularsteuerelemente zu deaktivieren / aktivieren? Danke.
Starten Sie die Eventhandler-Methode mit
%Vor%Wenn das Problem bei einem anderen Eventhandler liegt, können Sie die Ereignisregistrierung des Eventhandlers zuerst entfernen.
%Vor% Ich habe das im Laufe der Jahre schon oft erlebt. Meine Lösung ist eine Klassenvariable namens _noise, und wenn ich weiß, dass ich den Index der Combo oder eines anderen ähnlichen Steuerelements ändern möchte, das ausgelöst wird, wenn sich der ausgewählte Index ändert, mache ich Folgendes im Code.
Hier ist der Code für den Control Event Handler
%Vor%
Dann, wenn ich weiß, dass ich den Index ändern werde, mache ich folgendes:
Ich bin überrascht, dass es keinen besseren Weg gibt, dies zu tun, aber so mache ich es. Ich verwende tatsächlich das Tag
-Feld der meisten Steuerelemente, so dass ich das Steuerelement nicht unterklassifizieren muss. Und ich verwende true
/ null
als Werte, da null
der Standardwert ist.
Wenn Sie tatsächlich Tag
verwenden, müssen Sie das natürlich anders machen ...
Im Handler:
%Vor%Im Hauptcode
%Vor% Ein (ziemlich hässlicher) Weg wäre, ein Flag im Code zu setzen, der den Eintrag löscht und dann im SelectedIndexChanged
-Handler:
Ein besserer Weg könnte sein, den SelectedIndexChanged
-Ereignishandler am Anfang der Löschmethode zu entfernen und ihn am Ende wieder einzufügen. Auf diese Weise wissen Sie nicht, dass der Index geändert wurde.