2016-04-14 7 views
6

Ho un DropDownList in un progetto. Questo DropDownList contiene un evento SelectedIndexChanged:Dropdownlist controlla se l'indice è cambiato per codice o per selezione

private void cbo_SelectedIndexChanged(object sender, EventArgs e){......} 

E 'possibile controllare se l'indice è stato cambiato nel codice, come:

cbo.SelectedIndex = placering; 

, o se il cambiamento è avvenuto per interazione con l'utente?

risposta

5

Poiché DropDownList non ha la proprietà Focused come per il controllo ComboBox in WinForms non è così facile. Un modo è aggiungere un flag personalizzato e modificarne il valore prima di modificare la proprietà SelectedIndex. All'interno del gestore di eventi è possibile verificare la presenza di questo flag e ripristinare il suo valore:

private volatile bool isAutoFired = false; 

Poi da qualche parte nel codice:

isAutoFired = true; 
cbo.SelectedIndex = placering; 


private void cbo_SelectedIndexChanged(object sender, EventArgs e) 
{  
    if(!isAutoFired) 
    { 
     // event is fired by user 
    } 

    isAutoFired = false; 
} 
+0

Grazie, proprio quello che stavo cercando! – Moelbeck

1

è possibile rimuovere il gestore di eventi nel codice a destra prima di modo programmabile cambiare la selezione poi aggiungilo subito dopo. Questo è il mio approccio preferito. Non c'è bisogno di bandiere.

cbo.SelectedIndexChanged -= cbo_SelectedIndexChanged; 
cbo.SelectedIndex = 1 // or what you do to change the index 
cbo.SelectedIndexCHanged += new EventHandler(cbo_SelectedIndexChanged);