У меня есть пользовательский элемент управления, который имеет 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;
}
}
Нет ничего встроенного, вам нужно будет отслеживать это событие и отслеживать его в переменной экземпляра.
Используйте -1 в качестве неинициализированного «последнего индекса», поэтому при первом проходе вы устанавливаете его, но не используете. В последующих проходах вы его используете и настраиваете.
Вы всегда можете сделать это, используя собственный производный класс ComboBox, переопределив OnSelectedIndexChanged
и предоставив свойство PreviousSelectedIndex
. Таким образом, он не будет тесно связан с формой. В качестве альтернативы, поскольку вы можете сделать это с помощью событий, он также может быть реализован в качестве поставщика расширений .
Я предполагаю, что вам придется хранить текущее (которое позже станет предыдущим) в переменной, чтобы оно использовалось как кэш или что-то вроде этого.
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
. =(