WinForms ComboBox SelectedIndexChanged не срабатывает при вводе нескольких символов с последующим Alt + Down

Короче

Когда я набираю символ в ComboBox, нажимаю Alt + Down, а затем Enter или Tab, событие SelectedIndexChanged не срабатывает, даже если значение SelectedIndex меняется! Почему не запускается событие?

Обновление Та же ошибка возникает, если вы вводите символ, нажимаете Alt + Down, а затем нажимаете Esc. Вы ожидаете, что Esc отменит изменение. Однако SelectedIndex изменяет , а событие SelectedIndexChanged не срабатывает.

Что должно произойти, если вы просто наберете Alt + Down, используйте клавиши со стрелками для перехода к записи и затем введите Esc? Следует ли вернуть выбранный индекс к исходному значению?


Не так уж и коротко

У меня есть приложение WinForm с ComboBox на нем. Событие SelectedIndexChanged ComboBox связано с обработчиком событий, который показывает SelectedItem в элементе управления Label. Коллекция «Элементы ComboBox» имеет три значения: «Один», «Два» и «Три».

  • Когда я выбираю элемент с помощью мыши, срабатывает событие.
  • Когда я прокручиваю мышь, возникает событие. .
  • Когда я использую Alt + Down для раскрытия поля со списком и прохожу по элементам с Up и Down, событие срабатывает.
  • Но ... Когда я ввожу первый символ значения, затем нажмите Alt + Down, а затем нажмите Enter или Tab, значение будет выбрано и отображается в поле со списком, но событие не срабатывает.

Я также добавил кнопку, которая показывает SelectedIndex. Он показывает, что SelectedIndex изменился . Таким образом, даже несмотря на то, что SelectedIndex действительно меняется, событие SelectedIndexChanged не срабатывает!

Если я просто введу допустимое значение, например One , событие тоже не сработает, но в этом случае щелкните кнопка показывает, что SelectedIndex действительно не изменился. Так что в этом случае поведение нормальное.


Чтобы воспроизвести, создайте форму и добавьте ComboBox, Label и Button. Поместите следующий код в Form1.cs:

using System;
using System.Windows.Forms;

namespace ComboBoxSelectedIndexChanged
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            comboBox1.Items.AddRange(new object[] {
                "One",
                "Two",
                "Three"
            });
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            label1.Text = "Selected index: " + comboBox1.SelectedIndex;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Selected item: " + comboBox1.SelectedItem +
                "\nSelected index: " + comboBox1.SelectedIndex);
        }
    }
}
13
задан comecme 22 January 2011 в 17:08
поделиться