У меня проблема с обработкой индекса измененного события для Combobox, которая находится внутри DataGridView. Я пишу метод для обработки изменений выбора Combobox с использованием либо делегата:
ComboBox.SelectedIndexChanged -= delegate { ComboBoxIndexChanged(); };
ComboBox.SelectedIndexChanged += delegate { ComboBoxIndexChanged(); };
или EventHandler:
comboBox.SelectedIndexChanged += new EventHandler(ComboBoxIndexChanged);
, но оба метода не работают, как ожидалось. То есть, когда вы нажимаете на свой выделение в Combobox (содержащиеся в DataGridView), требуется несколько щелчков, чтобы вызвать My ComboboxindexChanged (); Способ функционировать правильно, что если он решит функционировать вообще. Какой лучший способ преодолеть / go-о том, как указывать событие на индексируемом пользовании Combobox внутри datagridView?
Код, который я в настоящее время использую в контексте, заключается в следующем:
private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
try
{
if (this.dataGridView.CurrentCell.ColumnIndex == (int)Column.Col)
{
ComboBox comboBox = e.Control as ComboBox;
if (comboBox != null)
{
comboBox.SelectedIndexChanged += new EventHandler(ComboBoxIndexChanged);
}
}
return;
}
catch (Exception Ex)
{
Utils.ErrMsg(Ex.Message);
return;
}
}
и событие ComboboxindexChanged:
private void ComboBoxIndexChanged(object sender, EventArgs e)
{
// Do some amazing stuff...
}
Я прочитал подобную нить на StackoverFlow, который гласит, что есть проблема с этим способом справиться с событием Combobox, но я не могу получить решение для работы. Почта можно найти здесь: Событие «Выбранное INDExChanged» в ComboboxColumn на DataGridView . Он говорит:
«Все сложные, так как они оптимизированы DatagridView, имея только один элемент управления редактированием только для всех строк. Вот как я обрабатывал аналогичную ситуацию:
сначала подключите делегат к событию EditControLship,
myGrid.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(
Grid_EditingControlShowing);
...
:
myGrid.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(
Grid_EditingControlShowing);
...
Затем в обработчике подключитесь к выгодным событию editControl:
void Grid_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{
// the event to handle combo changes
EventHandler comboDelegate = new EventHandler(
(cbSender, args) =>
{
DoSomeStuff();
});
// register the event with the editing control
combo.SelectedValueChanged += comboDelegate;
// since we don't want to add this event multiple times, when the
// editing control is hidden, we must remove the handler we added.
EventHandler visibilityDelegate = null;
visibilityDelegate = new EventHandler(
(visSender, args) =>
{
// remove the handlers when the editing control is
// no longer visible.
if ((visSender as Control).Visible == false)
{
combo.SelectedValueChanged -= comboDelegate;
visSender.VisibleChanged -= visibilityDelegate;
}
});
(sender as DataGridView).EditingControl.VisibleChanged +=
visibilityDelegate;
}
}"
Эта проблема у меня есть с этим, заключается в том, что «Vissender» не определен, следовательно, событие «VisibleChangeded» не может быть использовано.
Любая помощь от вас, Как всегда, самое ценится.