Meine C# -Anwendung hat eine 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 existiert, wird das Element aus comboBox
entfernt und comboBox
SelectedIndex
wird auf Null gesetzt. Wenn Sie jedoch comboBox
SelectedIndex
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? Vielen Dank.Ändern von ComboBox SelectedIndex ohne auslösendes Ereignis in C#
Antwort
die Eventhandler Methode Beginnen Sie mit
ComboBox combo = sender as ComboBox;
if (combo.SelectedIndex == 0)
{
return;
}
Wenn Sie Problem mit einem anderen Eventhandler ist zunächst die Eventhandler Veranstaltung Registrierung entfernen könnte.
combo.SelectedIndexChanged -= EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
combo.SelectedIndex = 0;
combo.SelectedIndexChanged += EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
One (ziemlich hässlich) Art und Weise einen Flag im Code zu setzen wäre, dass der Eintrag gelöscht und dann, dass der Check in den SelectedIndexChanged
Handler:
if (!deletedEntry)
{
// Do stuff
}
deletedEntry = false;
Eine bessere Möglichkeit, Ihre sein könnte zu entfernen SelectedIndexChanged
Event-Handler am Anfang der Löschmethode und wieder am Ende. Auf diese Weise wissen Sie nicht, dass sich der Index geändert hat.
Ich habe dies viele Male im Laufe der Jahre angetroffen. 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.
private bool _noise;
Hier ist der Code für die Steuerereignishandler
private void cbTest_SelectedIndexChange(object sender, EventArgs e)
{
if (_noise) return;
// process the events code
...
}
Dann, wenn ich weiß, ich werde den Index ändern, ich folgendes:
_noise = true; // cause the handler to ignore the noise...
cbTest.Index = value;
_noise = false; // let the event process again
Ich bin überrascht, dass es keinen besseren Weg dafür gibt, aber so mache ich es. Ich benutze tatsächlich das Feld Tag
der meisten Steuerelemente, so dass ich das Steuerelement nicht unterklassifizieren muss. Und ich verwende true
/null
als die Werte, da null
der Standardwert ist.
Natürlich, wenn Sie tatsächlich Tag
verwenden, müssen Sie es anders machen ...
In Handler:
private void control_Event(object sender, EventArgs e)
{
if (control.Tag != null) return;
// process the events code
...
}
Im Hauptcode
try
{
control.Tag = true;
// set the control property
control.Value = xxx;
or
control.Index = xxx;
or
control.Checked = xxx;
...
}
finally
{
control.Tag = null;
}
- 1. ändern Hash ohne Sammy auslösendes Ereignis
- 2. Kontextmenü Zurücksetzen von ComboBox SelectedIndex
- 3. ReactJS: Auslösendes Ereignis onBlur
- 4. MVVM ComboBox SelectedIndex vs. SelectedItem
- 5. C# Wenn Button IsEnabled, sein auslösendes Ereignis bei Klick
- 6. selecteditems und selectedindex C#
- 7. Zeile ändern Ereignis von Datagridview in C#
- 8. ComboBox Füllung mit LINQ C#
- 9. Verhindern Code ausgeführt, wenn Combobox SelectedIndex wurde nie geändert
- 10. ComboBox deaktivieren, ohne die Darstellung zu ändern
- 11. Wie man vb.net selectedindex der an arraylist gebundenen combobox einstellt
- 12. Warum kann ich SelectedIndex nicht für eine datengebundene ComboBox festlegen?
- 13. Get DatagridviewComboBoxCells SelectedIndex
- 14. C# Noob - Auslösendes Ereignis in mocked Interface-Klasse - Wie funktioniert dieser Code?
- 15. Text wird nicht hervorgehoben in Combobox, wenn selectedindex durch Code geändert wurde
- 16. Ändern der Farbe von Datagridview Backgroung mit der Combobox C#
- 17. Kann ComboBox "DroppingDown" Ereignis erfassen?
- 18. Ajax Combobox nicht Ereignis feuern, wenn Combobox leer
- 19. ändern CheckBox Zustand ohne OnClick Ereignis ruft
- 20. Combobox SelectedItemChanged Ereignis in einem Benutzersteuerelement
- 21. SelectedValue bei SelectedIndex in DropDownList erhalten?
- 22. jQuery ändern select list selectedIndex auf Hover-Ereignis und senden auch klicken?
- 23. WinForms Combobox SelectionChangeCommitted Ereignis ändert sich nicht immer SelectedValue
- 24. MVC 4 @ HTML.DropdownlistFor onchange-Ereignis muss SelectedIndex-Wert senden
- 25. Programmgesteuertes Ändern der Combobox
- 26. javafx: wie programmgesteuert Elemente von ComboBox in TableCell ändern?
- 27. wie ohne Combobox Hintergrund ohne PresentationFramework.Aero2
- 28. Eigenschaft in Combobox in Propertygrid ändern
- 29. Bestücken ComboBox von SQL in C#
- 30. C# databinding combobox Feld und füllen Liste von anderen Liste