2

ユーザーがグリッドの DataGridViewComboBoxColumn の値を変更したときにアクションを実行する必要があります。メッセージを表示する必要があるとします。

問題は、 messagebox.show("hello") コードが何百万回も実行されることです。

これが私のコードです。

grilla.EditingControlShowing+=new DataGridViewEditingControlShowingEventHandler(grilla_EditingControlShowing);

void  grilla_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control is ComboBox) //i have only one combobox column.
            {
                ComboBox cb = (ComboBox)e.Control;
                // first remove event handler to keep from attaching multiple:
                cb.SelectedIndexChanged -= new EventHandler(cb_SelectedIndexChanged);

                // now attach the event handler
                cb.SelectedIndexChanged += new EventHandler(cb_SelectedIndexChanged);
            }

        }

        void cb_SelectedIndexChanged(object sender, EventArgs e)
        {
            MessageBox.Show("hello");
        }
4

1 に答える 1

1

最後に、私が望んでいたことを正確に行うコードを見つけました:

grid.CurrentCellDirtyStateChanged += (s, e) => 
            {
                if (grid.IsCurrentCellDirty)
                {
                    grid.CommitEdit(DataGridViewDataErrorContexts.Commit);

                    MessageBox.Show("hello");
                }
            };

このメッセージは、コンボボックスセルの値を変更した後に 1 回だけ表示されます。

于 2013-02-01T14:16:50.093 に答える