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