ComboBox SelectedIndexChanged event: how to get the previously selected index?

65,512

Solution 1

There is nothing built in, you will need to listen for this event and keep track in an instance variable.

Use -1 as an uninitialized "last index", so on first pass you set it but don't use it. Subsequent passes you use it and set it.

You could always do this using a derived ComboBox class of your own and override OnSelectedIndexChanged and expose a PreviousSelectedIndex property. This way, it wouldn't be tightly coupled to the form. Alternatively, as you can do this using events, its also eligible for implementation as an extender provider.

Solution 2

I guess you will have to store the current (that will become the previous later on) into a variable so that it is used like a cache or something like so.

private void cboTargetMode_SelectedIndexChanged(object sender, EventArgs e) {
    // need to get the previously selected index and do some handling here...
    // ... some handler code here ...

    // Assuming that the variable PreviousSelectedIndex is declared in the class with value -1.
    if (PreviousSelectedIndex < 0)
        PreviousSelectedIndex = cbo.TargetMode.SelectedIndex;
    else
        // Do some handling here...

    switch (cboTargetMode.SelectedIndex) {
        case 1:  // ..... some code here...
            break;
        case 2:  // ..... some code here...
            break;
        case 3:  // ..... some code here...
            break;
        default: // ..... some code here...
            break;
    }
}

Is this something you have already thought of?

Otherwise, perhaps working with the Control.Validating event? I just can't say whether this event occurs before or after the SelectedIndexChanged event. =(

Share:
65,512
code4life
Author by

code4life

currently involved in everything related to: Angular 6, RxJs 6, Electron, NodeJs Express (ugh), Python (flask, restplus, pandas, hurray), Excel-DNA, Web API, .NET Core, FinCAD. historically, usually found myself doing everything related to c#, including sharepoint, biztalk, infopath, vsto (excel, word), asp.net, winforms, wpf, wcf, sql, xml/xsd/xslt, serialization. pretty much immersed in financial industry, hedge funds these days.

Updated on July 09, 2022

Comments

  • code4life
    code4life almost 2 years

    I have a user control which has a ComboBox and a SelectedIndexChanged event handler. In the event handler, I need to be able to tell what was the previously selected index... can anyone point me in the right direction?

    private void cboTargetMode_SelectedIndexChanged(object sender, EventArgs e)
    {
        // need to get the previously selected index and do some handling here...
        // ... some handler code here ...
    
    
        switch (cboTargetMode.SelectedIndex)
        {
            case 1:  // ..... some code here...
                break;
            case 2:  // ..... some code here...
                break;
            case 3:  // ..... some code here...
                break;
            default: // ..... some code here...
                break;
        }
    }