Проблема обработчика событий Combobox DatagridView

У меня проблема с обработкой индекса измененного события для 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» не может быть использовано.

Любая помощь от вас, Как всегда, самое ценится.

5
задан Community 23 May 2017 в 11:58
поделиться