Короче
Когда я ввожу символ в ComboBox, нажмите Alt + Down, затем Enter или Tab, событие SelectedIndexChanged не срабатывает, хотя значение SelectedIndex меняется! Почему пожар не срабатывает?
Обновление Такая же ошибка возникает, если вы вводите символ, нажмите Alt + Down, а затем введите Esc. Вы ожидали бы, что Esc отменит изменение. Тем не менее, SelectedIndex действительно изменяется, и событие SelectedIndexChanged не срабатывает.
Что произойдет, если вы просто наберете Alt + Down, используйте клавиши со стрелками, чтобы перейти к записи, а затем введите Esc? Если выбранный индекс будет возвращен к исходному значению?
Не так коротко
У меня есть приложение WinForm с ComboBox. Событие ComboBox SelectedIndexChanged подключается к обработчику событий, который показывает элемент SelectedItem в элементе Label. Коллекция элементов ComboBox имеет три значения: "один", "два" и "три".
- Когда я выбираю элемент с помощью мыши, событие срабатывает.
- При прокрутке мыши событие срабатывает.
- Когда я использую Alt + Down для расширения выпадающего списка и прохождения элементов с помощью Up и Down, событие срабатывает.
- Но... Когда я набираю первый символ значения, затем нажмите Alt + Down, затем Enter или Tab, значение выбирается и отображается в поле со списком, но событие не срабатывает.
Я также добавил кнопку, которая показывает SelectedIndex. Он показывает, что SelectedIndex изменился. Поэтому, несмотря на изменение SelectedIndex, событие SelectedIndexChanged не срабатывает!
Если я просто набираю допустимое значение, например One
, событие также не срабатывает, но в этом случае щелчок по кнопке показывает, что SelectedIndex действительно не изменился. Поэтому в этом случае поведение нормальное.
Воспроизведение, создание формы и добавление ComboBox, метки и кнопки. Поместите следующий код в 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);
}
}
}