2012-05-31 2 views
2

У меня есть datagridview с datagridviewcomboboxcell в приложении winform C#. Я легко могу захватить, когда выбран новый элемент, потому что происходит событие CellValueChanged. Тем не менее, я хотел бы иметь возможность обнаруживать, когда открывается combobox, но пользователь выбирает то же самое значение, которое уже было выбрано. Как я могу это зафиксировать?Обнаружение выбора одного и того же элемента в DataGridViewComboBoxCell

+0

Как насчет события со щелчком мыши? – RedEyedMonster

+0

Насколько я знаю, combobox запустит событие SelectedIndexChanged, даже если элемент/индекс вообще не изменен. Вы можете сохранить свой текущий выбор где-нибудь, а затем сравнить его с выбором пользователя. – Blablablaster

+0

получить значение старой ячейки в {if cellvalue is number copy в переменную int/short/byte} [если cellvalue является строкой, скопируйте ее в метку], что вы можете использовать в своем коде, а затем сравнить старый и новый – sihirbazzz

ответ

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

 Смежные вопросы

  • Нет связанных вопросов^_^