Moja aplikacja C# ma comboBox
ze zdarzeniem SelectedIndexChanged
. Zazwyczaj chcę, aby to wydarzenie zostało wywołane, ale czasami potrzebuję, aby wydarzenie się nie rozpaliło. Moja comboBox
jest listą plików MRU. Jeśli plik na liście nie istnieje, element zostaje usunięty z comboBox
, a wartość comboBox
SelectedIndex
jest ustawiona na zero. Jednak ustawienie wartościSelectedIndex
na zero powoduje, że zdarzenie SelectedIndexChanged
jest uruchamiane, co w tym przypadku jest problematyczne, ponieważ powoduje uruchomienie kodu UIF w procedurze obsługi zdarzeń. Czy istnieje elegancki sposób wyłączania/włączania zdarzeń dla formantów formularza C#? Dzięki.Modyfikowanie ComboBox SelectedIndex bez wywoływania zdarzenia w C#
Odpowiedz
Zacznij metodę Podprogram z
ComboBox combo = sender as ComboBox;
if (combo.SelectedIndex == 0)
{
return;
}
jeśli masz problem jest z innym eventhandler można usunąć rejestrację zdarzeń eventhandler pierwszy.
combo.SelectedIndexChanged -= EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
combo.SelectedIndex = 0;
combo.SelectedIndexChanged += EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
One (dość brzydki) sposobem byłoby ustawić flagę w kodzie, który usuwa wpis, a następnie sprawdzić, czy w SelectedIndexChanged
Handler:
if (!deletedEntry)
{
// Do stuff
}
deletedEntry = false;
Lepszym sposobem może być usunięcie swoje SelectedIndexChanged
funkcja obsługi zdarzenia na początku metody usuwania i przywróć ją na końcu. W ten sposób kod nie będzie wiedział, że indeks się zmienił.
Napotkałem to wiele razy przez te wszystkie lata. Moim rozwiązaniem jest posiadanie zmiennej poziomu klasy o nazwie _noise i jeśli wiem, że mam zamiar zmienić indeks kombi lub jakiejkolwiek innej podobnej kontroli, która uruchamia się po zmianie wybranego indeksu, robię co następuje w kodzie.
private bool _noise;
Oto kod do obsługi zdarzeń kontrola
private void cbTest_SelectedIndexChange(object sender, EventArgs e)
{
if (_noise) return;
// process the events code
...
}
wtedy, gdy wiem, mam zamiar zmienić indeks, mam następujące:
_noise = true; // cause the handler to ignore the noise...
cbTest.Index = value;
_noise = false; // let the event process again
Jestem zaskoczony, że nie ma lepszego sposobu na zrobienie tego, ale tak to robię. Właściwie używam pola Tag
większości kontrolek, więc nie muszę podklasy kontrolować. I używam /null
jako wartości, ponieważ null
jest domyślne.
Oczywiście, jeśli rzeczywiście przy Tag
, trzeba to zrobić inaczej ...
W Handler:
private void control_Event(object sender, EventArgs e)
{
if (control.Tag != null) return;
// process the events code
...
}
W kodzie głównym
try
{
control.Tag = true;
// set the control property
control.Value = xxx;
or
control.Index = xxx;
or
control.Checked = xxx;
...
}
finally
{
control.Tag = null;
}
- 1. C# zestaw UserControl.Value bez wywoływania zdarzenia ValueChanged
- 2. Zmiana wartości mieszania bez wywoływania zdarzenia haszowania
- 3. Wyczyść select2 bez wywoływania zmiany zdarzenia
- 4. Jak odświeżyć/odłożyć databound ComboBox? SelectedIndex = -1 nie działa
- 5. C# Uzyskaj metodę wywoływania bez śledzenia stosu
- 6. Zdarzenie komórki combobox DataGridView w języku C#
- 7. listen() bez wywoływania bind()
- 8. Prawidłowo usprawniony combobox w C#
- 9. WPF: ComboBox bez przycisku rozwijanego
- 10. Pierwsze wybrana wartość combobox
- 11. sposób wywoływania zdarzenia po zmianie tekstu etykiety
- 12. Excel VBA: Zapisz jako powoduje zmianę zdarzenia w ComboBox
- 13. Modyfikowanie ciągu zapytania bez ponownego ładowania strony
- 14. Jak zapobiec/anulować zmianę wartości combobox w C#?
- 15. Set $ .prop() bez wywoływania zmian
- 16. selectedIndex jest niezdefiniowana z jQuery w dropdownlist
- 17. przydzielić pamięci na stosie bez wywoływania konstruktora
- 18. Sposób wywoływania serwletu wylogowania w przypadku zdarzenia zamknięcia przeglądarki
- 19. C# Dziwne zachowanie Combobox WPF
- 20. combobox wartość domyślna winforms C#
- 21. Jak zdobyć dane w ComboBox C#
- 22. Uzyskaj tag wybranego elementu w WPF ComboBox
- 23. C# Zdarzenia bez argumentów. Jak sobie z nimi radzić?
- 24. Potrzebujesz prostego roboczego przykładu ustawienia WPF MVVM ComboBox ItemsSource na podstawie SelectedValue drugiego ComboBox
- 25. Ukryj przycisk strzałki w ComboBox w C#, VS2008
- 26. Jak używać zewnętrznego "C" do wywoływania funkcji C++ w C
- 27. Jak uzyskać wartość ValueMember z ComboBox C# WinForm?
- 28. wiążących combobox do innego combobox w WPF
- 29. Modyfikowanie kolorów w rst.el
- 30. Metody wywoływania za pomocą nazw w C#