Отмена события ListBox SelectedIndexChange

Действительно ли возможно отменить событие SelectedIndexChange для поля списка на приложении winforms? Это походит на такую логическую вещь иметь это, я должен пропускать некоторую легкую функцию. В основном я открывался окно сообщения, спрашивающее, хочет ли пользователь действительно переместиться в другой объект, поскольку это изменит UI, и я не хочу, чтобы их изменения были потеряны. Я хотел бы смочь отменить событие в случае, если пользователь не сохранил то, что они продолжают работать. Существует ли лучший способ сделать это?

14
задан John Topley 31 March 2010 в 20:27
поделиться

2 ответа

Вы не можете отменить его.

Всего пару дней назад я создал переменную с последним выбранным индексом. Затем, когда событие срабатывает, вы спрашиваете пользователя, хочет ли он сохранить, это делается в обработчике событий. Если пользователь выбрал «Отмена», вы снова измените идентификатор.

Проблема в том, что это приведет к повторному срабатыванию события. Так что я использовал bool, просто говоря «Inhibit». И в верхней части обработчика событий у меня есть:

if(Inhibit)
   return;

Затем ниже, где вы задаете вопрос, вы делаете что-то вроде этого:

DialogResult result = MessageBox.Show("yadadadad", yadada cancel etc);
if(result == DialogResult.Cancel){
   Inhibit = true; //Make sure that the event does not fire again
   list.SelectedIndex = LastSelectedIndex; //your variable
   Inhibit = false; //Enable the event again
}
LastSelectedIndex = list.SelectedIndex; // Save latest index.
17
ответ дан 1 December 2019 в 07:12
поделиться

SelectedIndexChanged нельзя отменить. Таким образом, у вас есть только один реальный вариант:

private int? currentIndex;
public void ListBox_SelectedIndexChanged(sender, EventArgs args) {
    if (currentIndex.HasValue && currentIndex.Value != listBox1.SelectedIndex) {
        var res = MessageBox.Show("Do you want to cancel edits?", "Cancel Edits", MessageBoxButtons.YesNo);
        if (res == DialogResult.Yes) {
            currentIndex = (listBox1.SelectedIndex == -1 ? null : (int?) listBox1.SelectedIndex);
        } else {
            listBox1.SelectedIndex = currentIndex.Value;
        }
    }
}
2
ответ дан 1 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

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