Событие ComboBox SelectedIndexChanged: как получить ранее выбранный индекс?

У меня есть пользовательский элемент управления, который имеет ComboBox и обработчик событий SelectedIndexChanged. В конечном счете обработчик, я должен смочь сказать то, что было ранее выбранным индексом... кто-либо может указать на меня в правильном направлении?

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;
    }
}
15
задан code4life 13 July 2010 в 13:58
поделиться

2 ответа

Нет ничего встроенного, вам нужно будет отслеживать это событие и отслеживать его в переменной экземпляра.

Используйте -1 в качестве неинициализированного «последнего индекса», поэтому при первом проходе вы устанавливаете его, но не используете. В последующих проходах вы его используете и настраиваете.

Вы всегда можете сделать это, используя собственный производный класс ComboBox, переопределив OnSelectedIndexChanged и предоставив свойство PreviousSelectedIndex . Таким образом, он не будет тесно связан с формой. В качестве альтернативы, поскольку вы можете сделать это с помощью событий, он также может быть реализован в качестве поставщика расширений .

23
ответ дан 1 December 2019 в 02:45
поделиться

Я предполагаю, что вам придется хранить текущее (которое позже станет предыдущим) в переменной, чтобы оно использовалось как кэш или что-то вроде этого.

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;
    }
}

Это то, о чем вы уже подумали?

Иначе, возможно, работа с Control.Validating событием? Я просто не могу сказать, происходит ли это событие до или после события SelectedIndexChanged. =(

3
ответ дан 1 December 2019 в 02:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: