0

在下面的代码中,SelectionChanged 事件在 RowsAdded 结束之前被触发,我怎样才能使事件原子?

private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[1];
        dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[1].Selected = true;
    }

private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        if (dataGridView1.CurrentRow != null)
        {
            //Something
        }
    }

我该怎么办?

4

2 回答 2

2

SelectionChanged在处理过程中被触发,RowsAdded因为您通过更改. 添加一行不会导致两个事件都被触发——您在处理第一个事件时会引发第二个事件。(事实上​​,你可能造成了两次,因为处理程序中的两行似乎都改变了选择)。 dataGridView1_RowsAddedSelectionChanged

如果您不想dataGridView1_SelectionChanged在 RowsAdded 处理程序中运行,则需要暂时​​取消订阅该事件:

dataGridView1.SelectionChanged -= dataGridView1_SelectionChanged;
// change the selection... 
dataGridView1.SelectionChanged += dataGridView1_SelectionChanged;

或者更好的是,重新设计您在 SelectionChanged 处理程序中所做的事情,使其适用于事件的所有实例。

于 2012-06-30T08:09:00.753 回答
0

您可以覆盖您想要控制的事件,然后在被覆盖的事件中放置一个 if 条件,并控制它何时触发以及何时不触发。马赫迪

于 2012-06-30T07:39:37.513 回答