c# - SelectedIndexChanged 事件多次触发

标签 c# datagridview

当用户更改我的网格中 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");
        }

最佳答案

最后你找到了一个完全符合我要求的代码:

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

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

更改组合框单元格的值后,消息仅显示一次。

关于c# - SelectedIndexChanged 事件多次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14608491/

相关文章:

时间:2019-05-17 标签:c#dataGridViewnullreferenceException

c# - 一行上的 RDLC 多个值

c# - 如何将行从一个 DataGridView 移动到另一个 DataGridView?

c# - DatagridView 不显示错误图标或错误文本?

c# - 如何从 DataGridView 控件打印值

C# 通过反射获取属性

c# - 在什么情况下有必要脱离事件?

c# - 如何突出显示任务栏项目

c# - 如何在不使用模型的情况下使用 Entity Framework 执行原始 SQL 查询?

c# - 仅在 3.5 中从 List<T> 到 IEnumerable<T> 的 InvalidCastException