[英]Is there anyway to prevent some event fired before end of another event?
在下面的代码中,在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
}
}
我该怎么办?
SelectionChanged
在处理中间被解雇RowsAdded
因为你造成了由内改变当前单元格的SelectionChanged dataGridView1_RowsAdded
。 添加行不会导致触发两个事件 - 在处理第一个事件时会导致第二个事件。 (事实上,你可能导致SelectionChanged
两次,因为处理程序中的两行似乎都改变了选择)。
如果您不希望在RowsAdded处理程序中运行dataGridView1_SelectionChanged
,则需要暂时取消订阅该事件:
dataGridView1.SelectionChanged -= dataGridView1_SelectionChanged;
// change the selection...
dataGridView1.SelectionChanged += dataGridView1_SelectionChanged;
或者更好的是,重新设计您在SelectionChanged处理程序中执行的操作,以使其适用于事件的所有实例。
您可以覆盖要控制的事件,然后在overriden事件中放置if条件并控制它何时触发以及何时触发。 马赫迪
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.