2012-08-23 4 views
5

Ho una casella combinata (winform). Questa casella combinata contiene alcuni elementi (ad esempio, 1,2,3,4).Ottenere il vecchio indice selezionato nella casella combinata di Winform

Ora, quando cambio la selezione all'interno di questo combo, desidero conoscere l'indice di vecchia e il nuovo indice.

Come ottengo questo?

Possibili approcci che desidero EVITARE.

  1. Aggiungi un Inserisci evento, Cache l'indice corrente e quindi sul cambiamento indice di selezione ottenere il nuovo indice.

  2. Utilizzo del testo selezionato/proprietà dell'oggetto selezionato ricevuta dal mittente dell'evento.

Quello che idealmente vuole:

  1. Nei args eventi che vengono ricevuti, voglio qualcosa di simile:

    e.OldIndex; e.newIndex;

    In questo momento gli argomenti dell'evento ricevuti nell'evento SelectionIndex Change sono totalmente inutili.

  2. Non voglio utilizzare più di un evento.

  3. Se C# non offre questo, posso avere il mio evento che passa il vecchio indice e il nuovo indice come argomenti di evento?

+0

Ciao Nikhil, puoi farlo usando una variabile e senza eventi, se sei d'accordo con l'idea di postare il codice come risposta. –

+0

ComboBoxEdit di devexpress ha un evento EditValueChanging. Se non vuoi fare nulla con l'indice e vuoi solo la proprietà del testo, allora è meglio controllare rispetto alla combobox standard. Vedi http://documentation.devexpress.com/#WindowsForms/DevExpressXtraEditorsBaseEdit_EditValueChangingtopic –

+1

possibile duplicato dell'evento [ComboBox SelectedIndexChanged: come ottenere l'indice precedentemente selezionato?] (Http://stackoverflow.com/questions/3237885/combobox-selectedindexchanged- evento-how-to-get-indice-precedentemente selezionati a) – Rawling

risposta

0

1-Fare un elenco di numeri interi
2-Bind un pulsante per passare alla precedente Screen (tasto nome "prevB")
3 cambiare l'Indice ComboBox come da descritto nel codice

//initilize List and put current selected index in it 

List<int> previousScreen = new List<int>(); 
previousScreen.Add(RegionComboBox.SelectedIndex);  

//Button Event 
private void prevB_Click(object sender, EventArgs e) 
    { 
     if (previousScreen.Count >= 2) 
     { 
      RegionComboBox.SelectedIndex = previousScreen[previousScreen.Count - 2]; 
     } 
    } 
0

sarà necessario sostituire il ComboBox con t egli seguente controllo:

public class AdvancedComboBox : ComboBox 
{ 
    private int myPreviouslySelectedIndex = -1; 
    private int myLocalSelectedIndex = -1; 

    public int PreviouslySelectedIndex { get { return myPreviouslySelectedIndex; } } 

    protected override void OnSelectedIndexChanged(EventArgs e) 
    { 
     myPreviouslySelectedIndex = myLocalSelectedIndex; 
     myLocalSelectedIndex = SelectedIndex; 
     base.OnSelectedIndexChanged(e); 
    } 
} 

ora è possibile ottenere la proprietà PreviouslySelectedIndex.