繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM