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