Jak tymczasowo wyłączyć obsługę zdarzeń w WinForms?WinForms: tymczasowo wyłączyć moduł obsługi zdarzeń
Odpowiedz
Prawdopodobnie najprostszym sposobem (który nie wymaga wypisywania lub inne rzeczy) jest zadeklarować wartość logiczną i sprawdzić go na początku Handler:
bool dontRunHandler;
void Handler(object sender, EventArgs e) {
if (dontRunHandler) return;
// handler body...
}
To jest proste, ale kod będzie bałagan, jeśli często go używasz. – maamaa
Wyłącz Z tego co perspektywy? Jeśli chcesz usunąć metodę, która jest w twoim zasięgu z listy delegatów na przewodnika, można po prostu zrobić ..
object.Event -= new EventHandlerType(your_Method);
To usunie tę metodę z listy uczestników, a można go ponownie podłączyć później z
object.Event += new EventHandlerType(your_Method);
Myślę, że masz na myśli metodę Your_Method zamiast Your_Method(). Począwszy od C# 2.0, nie potrzebujesz również części "new EventHandlerType" - po prostu object.Event + = yourMethod; i object.Event - = yourMethod; –
Tak, chciałem, żeby to było sans parens;). Nie zdawano sobie jednak sprawy z niejawnej konstrukcji delegatów; dobrze wiedzieć. –
Ten pomysł działa dla mnie (w porównaniu do zaakceptowanej odpowiedzi) w scenariuszu, w którym potrzebowałem tymczasowo wyłączyć Handler dla combobox EditValueChanged. – PhoenixDev
Robię to w ten sposób, używając rozszerzenia kontrolnego.
public static void SetDatasource(
this ComboBox cb,
object dataSource,
EventHandler _SelectedIndexChanged_eventHandler = null,
EventHandler _SelectedValueChanged_eventHandler = null)
{
//disable events
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged -= _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged -= _SelectedValueChanged_eventHandler;
if (cb.InvokeRequired)
{
cb.BeginInvoke(new _d_SetDatasource_ComboBox(SetDatasource), new object[] { cb, dataSource, _SelectedIndexChanged_eventHandler});
}
else
{
cb.DataSource = dataSource;
//events enabled again
if (_SelectedIndexChanged_eventHandler != null) cb.SelectedIndexChanged += _SelectedIndexChanged_eventHandler;
if (_SelectedValueChanged_eventHandler != null) cb.SelectedValueChanged += _SelectedValueChanged_eventHandler;
}
}
private delegate void _d_SetDatasource_ComboBox(ComboBox cb, object dataSource, EventHandler _SelectedIndexChanged_eventHandler = null, EventHandler _SelectedValueChanged_eventHandler = null);
- 1. Moduł obsługi zdarzeń multiselect jquery
- 2. Jak usunąć moduł obsługi zdarzeń document.onkeydown?
- 3. Jak tymczasowo wyłączyć browsersync?
- 4. Visual Studio: tymczasowo wyłączyć StyleCop
- 5. Jak tymczasowo wyłączyć zdarzenia kliknięcia przycisku bez jego całkowitego wyłączenia?
- 6. Filtr VBA programu Excel Zmienić moduł obsługi zdarzeń
- 7. Prevent wykonanie obsługi zdarzeń rodzic
- 8. IE8 onclick obsługi zdarzeń
- 9. dla obsługi zdarzeń
- 10. dostęp do obsługi zdarzeń
- 11. Usuwanie obsługi zdarzeń
- 12. Jak tymczasowo wyłączyć wyzwalacze w PostgreSQL?
- 13. Jak tymczasowo wyłączyć buforowanie Spring cache
- 14. Entity Framework/MVC3: tymczasowo wyłączyć sprawdzanie poprawności
- 15. Opóźnianie obsługi zdarzeń do momentu wystrzelenia zdarzeń
- 16. Podnoszenie niestandardowych zdarzeń w C# WinForms
- 17. Moduł CMake do obsługi gettext?
- 18. Moduł obsługi HTTP a HTTP
- 19. Dodawanie modułu obsługi zdarzeń kliknięcia do iframe
- 20. Unit Testing Flex obsługi zdarzeń
- 21. Jak poprawnie wyrejestrować obsługi zdarzeń
- 22. Jak usunąć obsługi zdarzeń lambda
- 23. Ręczne wywoływanie procedury obsługi zdarzeń
- 24. Dziedziczenie obsługi zdarzeń w C#
- 25. obsługi zdarzeń metoda podnoszenia konwencja
- 26. C# usuwanie programu obsługi zdarzeń
- 27. Przekazywanie argumentów do obsługi zdarzeń
- 28. Jak programowo wyłączyć moduł Orchard?
- 29. wiąże w WinForms rozwijane
- 30. Gdzie jest fn.toggle (program obsługi (eventObject), moduł obsługi (eventObject) ...)?
Czy możesz dzielić się tym, co robisz na wyższym poziomie? Ponieważ prawdopodobnie nie chcesz wyłączać funkcji obsługi zdarzeń _ALL_ (domyślne narzędzia do rysowania i przenoszenia formularza przychodzą na myśl). –
Po prostu nie chcę przechwytywać zmian w stanie kontroli podczas aktualizacji programowej. I tak, nie chcę wyłączać funkcji obsługi zdarzeń _ALL_, po prostu "program obsługi zdarzeń". http://stackoverflow.com/questions/744436/winforms-two-way-textbox-problem – George