L'applicazione My C# ha un evento comboBox
con un evento SelectedIndexChanged
. Di solito, voglio che questo evento esploda, ma a volte ho bisogno che l'evento non venga attivato. Il mio comboBox
è un elenco di file MRU. Se si trova che un file nell'elenco non esiste, l'elemento viene rimosso da comboBox
e comboBox
SelectedIndex
è impostato su zero. Tuttavia, l'impostazione di comboBox
SelectedIndex
su zero provoca l'attivazione dell'evento SelectedIndexChanged
, che in questo caso è problematico perché causa l'esecuzione di un codice UIF nel gestore eventi. C'è un modo elegante per disabilitare/abilitare gli eventi per i controlli di forma C#? Grazie.Modifica di ComboBox SelectedIndex senza evento di trigger in C#
risposta
Avviare il metodo EventHandler con
ComboBox combo = sender as ComboBox;
if (combo.SelectedIndex == 0)
{
return;
}
se siete problema è con un EventHandler diverso è possibile rimuovere prima registrazione degli eventi del EventHandler.
combo.SelectedIndexChanged -= EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
combo.SelectedIndex = 0;
combo.SelectedIndexChanged += EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
Un modo (abbastanza brutto) potrebbe essere quella di impostare un flag nel codice che cancella la voce e quindi controllare che nel SelectedIndexChanged
gestore:
if (!deletedEntry)
{
// Do stuff
}
deletedEntry = false;
Un modo migliore potrebbe essere quella di rimuovere il SelectedIndexChanged
gestore di eventi all'inizio del metodo di eliminazione e ripristinarlo alla fine. In questo modo il codice non saprà che l'indice è cambiato.
Ho incontrato questo molte volte nel corso degli anni. La mia soluzione è di avere una variabile di livello di classe chiamata _noise e se so che sto per cambiare l'indice di combo o qualsiasi altro controllo simile che si attiva quando cambia l'indice selezionato, faccio quanto segue nel codice.
private bool _noise;
Ecco il codice per il gestore di eventi di controllo
private void cbTest_SelectedIndexChange(object sender, EventArgs e)
{
if (_noise) return;
// process the events code
...
}
Poi quando so che sto andando a modificare l'indice, faccio la seguente:
_noise = true; // cause the handler to ignore the noise...
cbTest.Index = value;
_noise = false; // let the event process again
Sono sorpreso che non ci sia un modo migliore per farlo, ma questo è il modo in cui lo faccio. In realtà utilizzo il campo Tag
della maggior parte dei controlli, quindi non devo sottoclasse il controllo. E io uso true
/null
come valori, dal momento che null
è l'impostazione predefinita.
Naturalmente, se in realtà si sta utilizzando Tag
, è necessario farlo in modo diverso ...
In handler:
private void control_Event(object sender, EventArgs e)
{
if (control.Tag != null) return;
// process the events code
...
}
Nel codice principale
try
{
control.Tag = true;
// set the control property
control.Value = xxx;
or
control.Index = xxx;
or
control.Checked = xxx;
...
}
finally
{
control.Tag = null;
}
- 1. Excel VBA: trigger Salva come Modifica evento in ComboBox
- 2. Evento cella combobox DataGridView in C#
- 3. Evento "onchange" di trigger
- 4. ComboBox in DatagridView in modalità di modifica
- 5. Evento di modifica trigger <select> utilizzando jquery
- 6. InvalidArgument = Il valore di '0' non è valido per 'SelectedIndex'. Nome parametro: SelectedIndex
- 7. Come disabilitare la modifica di elementi in combobox per C#?
- 8. Evento di ridimensionamento del trigger su stampa
- 9. Trigger contro evento JPA
- 10. jquery - evento personalizzato trigger
- 11. Modifica dinamica del DataStore di un ComboBox
- 12. Modifica hash senza attivazione di un evento hashchange
- 13. Evento trigger Jquery per casella di controllo
- 14. WooCommerce: evento trigger dopo variazione di variazione
- 15. evento Trigger su finestra di dialogo aperta
- 16. javascript modifica evento evento
- 17. predefinito DataSource in ComboBox C#
- 18. C# ComboBox GotFocus
- 19. evento trigger sul cambio classe
- 20. angular2 - Evento trigger in direttiva dal componente
- 21. Chiave trigger JQuery. Evento codice
- 22. File di input trigger evento click in AngularJS
- 23. Ottenere il SelectedIndex di un oggetto LongListSelector
- 24. Evento di modifica evento di selezione select2 dinamico
- 25. Evento di modifica dell'ingresso del polimero
- 26. Evento Javascript trigger su Aggiungi a DOM
- 27. Evento di trigger sul caricamento dell'immagine di sfondo
- 28. Come impostare la voce selezionata di ComboBox in C# Windows Forms?
- 29. C# Messagebox Con ComboBox
- 30. Come deleselect/blank un ComboBox del database? SelectedIndex = -1 non funziona