Come disabilitare temporaneamente un gestore di eventi in WinForms?WinForms: disabilita temporaneamente un gestore di eventi
risposta
Probabilmente, il modo più semplice (che non ha bisogno annullamento dell'iscrizione o altre cose) è quello di dichiarare un valore booleano e controllare all'inizio del gestore:
bool dontRunHandler;
void Handler(object sender, EventArgs e) {
if (dontRunHandler) return;
// handler body...
}
Questo è semplice, ma il codice sarà un disastro se lo usi spesso. – maamaa
Disabilita da quale prospettiva? Se si desidera rimuovere un metodo che è nel vostro campo di applicazione dalla lista dei delegati del gestore, si può solo fare ..
object.Event -= new EventHandlerType(your_Method);
Questo eliminerà quel metodo dall'elenco dei delegati, e si può ricollegare in un secondo momento con
object.Event += new EventHandlerType(your_Method);
Penso che tu intenda your_Method invece di your_Method(). A partire da C# 2.0, non hai nemmeno bisogno della parte "new EventHandlerType" - solo object.Event + = yourMethod; e object.Event - = yourMethod; –
Sì, intendevo che fosse senza parens;). Non era a conoscenza della costruzione implicita del delegato, però; buono a sapersi. –
Questa idea funziona per me (rispetto alla risposta accettata) nello scenario in cui avevo bisogno di disabilitare temporaneamente il Gestore per una casella combinata ModificaValoreChanged. – PhoenixDev
Lo sto facendo in questo modo, utilizzando un'estensione di controllo.
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. disabilita temporaneamente l'aggiornamento automatico
- 2. Disabilita temporaneamente i vincoli
- 3. (Temporaneamente) Disabilita convalida in WPF
- 4. PostgreSQL: disabilita temporaneamente le connessioni
- 5. Throttle un gestore eventi
- 6. Visual Studio: disabilita temporaneamente StyleCop
- 7. Disabilita animazione WinForms ProgressBar
- 8. Chiamare manualmente un gestore eventi
- 9. C# rimozione di un gestore di eventi
- 10. Disabilita temporaneamente l'avviso gcc sulla ridefinizione
- 11. Disabilita temporaneamente l'animazione su Lollipop CheckBox
- 12. Entity Framework/MVC3: disabilita temporaneamente la convalida
- 13. Passaggio di argomenti a un gestore eventi
- 14. Come rimuovere un gestore di eventi lambda
- 15. Devo rimuovere un gestore di eventi?
- 16. Implementazione di un singolo gestore di eventi per più controlli con diversi delegati del gestore eventi
- 17. Disabilita javascript nel controllo WebBrowser di WinForms?
- 18. Gestore di eventi multiselect Jquery
- 19. Snap.svg - drag gestore di eventi
- 20. Gestore eventi in DataTemplate
- 21. Winforms controlla gli eventi personalizzati
- 22. Sospendi temporaneamente la gestione degli eventi jQuery
- 23. C# WinForms disabilita il ridimensionamento DPI
- 24. C#: inizializzazione di un gestore di eventi con un manichino
- 25. Gestore di eventi di chiusura Python Flask
- 26. di accesso in gestore di eventi
- 27. Dove annullare l'iscrizione di eventi in un WinForms UserControl
- 28. Come rimuovere un gestore di eventi dall'istanza di JWPlayer?
- 29. Sintassi per l'aggiunta di un gestore di eventi in VB.NET
- 30. gestore di eventi per un elemento di input colore HTML5
Puoi condividere quello che stai facendo a un livello superiore? Perché probabilmente non si vogliono disabilitare i gestori di eventi _ALL_ (vengono in mente i gestori di paint e move di default del modulo). –
Semplicemente non voglio rilevare cambiamenti nello stato di un controllo quando lo aggiorno a livello di programmazione. E sì, non voglio disabilitare _ALL_ gestori di eventi, solo "un gestore di eventi". http://stackoverflow.com/questions/744436/winforms-two-way-textbox-problem – George