在下面的代码中,在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
}
}
我该怎么办?
答案 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条件,并在触发时控制它,何时不触发。 马赫迪