Определить выбор одного и того же элемента в DataGridViewComboBoxCell
У меня есть сетевое представление данных с комбинированным ящиком данных в приложении winform C#. Я легко могу захватить, когда новый элемент выбран, потому что происходит событие CellValueChanged. Тем не менее, я хотел бы иметь возможность определять, когда открыт комбинированный список, но пользователь выбирает то же значение, которое уже было выбрано. Как я могу захватить это?
2 ответа
Сочетание EditingControlShowing
работает событие и некоторые события со списком1.
EditingControlShowing
позволяет нам получить доступ к встроенному элементу управления со списком:
dataGridView1.EditingControlShowing += new
DataGridViewEditingControlShowingEventHandler(dataGridView1_EditingControlShowing);
void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox control = e.Control as ComboBox;
if (control != null)
{
control.DropDown += new EventHandler(control_DropDown);
control.DropDownClosed += new EventHandler(control_DropDownClosed);
}
}
Я добавил частную переменную уровня класса в форму, чтобы сохранить выбранный индекс поля со списком.
void control_DropDown(object sender, EventArgs e)
{
ComboBox c = sender as ComboBox;
_currentValue = c.SelectedIndex;
}
void control_DropDownClosed(object sender, EventArgs e)
{
ComboBox c = sender as ComboBox;
if (c.SelectedIndex == _currentValue)
{
MessageBox.Show("no change");
}
}
1. Это решение срабатывает каждый раз, когда поле со списком открывается и закрывается - если вы хотите что-то еще (например, когда поле со списком фиксирует это изменение в сетке), обновите свой вопрос, описывая точное поведение.