У меня есть datagridview с datagridviewcomboboxcell в приложении winform C#. Я легко могу захватить, когда выбран новый элемент, потому что происходит событие CellValueChanged. Тем не менее, я хотел бы иметь возможность обнаруживать, когда открывается combobox, но пользователь выбирает то же самое значение, которое уже было выбрано. Как я могу это зафиксировать?Обнаружение выбора одного и того же элемента в DataGridViewComboBoxCell
2
A
ответ
2
Сочетание EditingControlShowing
события и некоторые поля со списком событий работает .
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. Это решение срабатывает каждый раз, когда открывается поле со списком и закрытым - если вы хотите что-то другое (например, когда выпадающий совершает это изменение в сетке) обновить свой вопрос, описывающий точное поведение ,
0
пытаются увидеть события: - DropDown - DropDownClosed
Как насчет события со щелчком мыши? – RedEyedMonster
Насколько я знаю, combobox запустит событие SelectedIndexChanged, даже если элемент/индекс вообще не изменен. Вы можете сохранить свой текущий выбор где-нибудь, а затем сравнить его с выбором пользователя. – Blablablaster
получить значение старой ячейки в {if cellvalue is number copy в переменную int/short/byte} [если cellvalue является строкой, скопируйте ее в метку], что вы можете использовать в своем коде, а затем сравнить старый и новый – sihirbazzz