Ändern von ComboBox SelectedIndex ohne Auslösen eines Ereignisses in C #

7

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.

    
Jim Fell 28.07.2010, 19:12
quelle

4 Antworten

11

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%     
Jimmy Hoffa 28.07.2010, 19:14
quelle
8

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.

%Vor%

Hier ist der Code für den Control Event Handler

%Vor%


Dann, wenn ich weiß, dass ich den Index ändern werde, mache ich folgendes:

%Vor%     
Les Smith 14.09.2011 19:05
quelle
3

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%     
Mark Lakata 04.06.2013 21:37
quelle
1

Ein (ziemlich hässlicher) Weg wäre, ein Flag im Code zu setzen, der den Eintrag löscht und dann im SelectedIndexChanged -Handler:

überprüft %Vor%

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.

    
ChrisF 28.07.2010 19:19
quelle

Tags und Links