L'evento SelectedIndexChanged
viene licenziato nella mia applicazione da una casella combinata quando:Differenziazione tra eventi generati da interazione con l'utente e il mio codice
- l'utente sceglie un diverso voce nella casella combinata, o quando:
- il mio codice aggiorna la combinazione della casella
SelectedItem
per riflettere che la casella combinata ora visualizza le proprietà per un oggetto diverso.
Sono interessato all'evento SelectedIndexChanged
per il caso 1, in modo da poter aggiornare le proprietà dell'oggetto corrente. Ma nel caso 2, non voglio che l'evento si attivi, perché le proprietà dell'oggetto non sono cambiate.
Un esempio può essere d'aiuto. Consideriamo che ho una casella di riepilogo contenente un elenco di persone e ho una casella combinata che rappresenta la nazionalità della persona attualmente selezionata nell'elenco. Il caso 1 potrebbe accadere se Fred è attualmente selezionato nell'elenco e io uso la casella combinata per cambiare la sua nazionalità dall'inglese al gallese. Il caso 2 potrebbe accadere se seleziono Bob, che è scozzese, nella lista. Qui, il mio elenco aggiornato del codice del gestore di eventi vede che Bob è ora selezionato e aggiorna la casella combinata in modo che Scottish ora sia l'elemento selezionato. Ciò causa l'attivazione dell'evento SelectedIndexChanged
della casella combinata per impostare la nazionalità di Bob in scozzese, anche se è già scozzese.
Come posso aggiornare la proprietà SelectedItem
della casella combinata senza causare l'evento SelectedIndexChanged
da attivare? Un modo sarebbe annullare la registrazione del gestore eventi, impostare SelectedItem
, quindi registrare nuovamente il gestore eventi, ma questo sembra noioso e soggetto a errori. Ci deve essere un modo migliore.
Me lo concedo. Ma non è un po 'eccessivo: "Come posso aggiornare la proprietà SelectedItem della mia casella combinata senza causare l'evento SelectedIndexChanged?" Per favore potrei avere un feedback sulla mia soluzione? –
Potrebbe essere eccessivo. L'impostazione di flags o la rimozione dell'handler di eventi è una soluzione più semplice, ma ho creato il mio SuspendLatch quando ho realizzato che avevo più posizioni in cui sospendere l'evento SelectedIndexChanged –
"Le offerte con un nome migliore sono benvenute" - public class SuspendThingerMajig? – Juliet