反正有没有阻止某个事件在另一个事件结束前被触发?

时间:2012-06-30 06:57:00

标签: c# events datagridview

在下面的代码中,在RowsAdded结束之前触发SelectionChanged事件,如何使事件成为原子?

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
        }
    }

我该怎么办?

2 个答案:

答案 0 :(得分:2)

处理SelectionChanged时会触发

RowsAdded,因为您通过更改 dataGridView1_RowsAdded中的当前单元格来导致SelectionChanged。添加行不会导致触发两个事件 - 在处理第一个事件时会导致第二个事件。 (事实上​​,你可能会导致SelectionChanged两次,因为处理程序中的两行似乎都改变了选择。

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

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

或者甚至更好,重新设计您在SelectionChanged处理程序中执行的操作,以使其适用于事件的所有实例。

答案 1 :(得分:0)

您可以覆盖要控制的事件,然后在覆盖事件中添加if条件,并在触发时控制它,何时不触发。 马赫迪