2012-06-30 44 views
0

在下面的代碼中,SelectionChanged事件在RowsAdded結束之前觸發,我如何使事件成爲原子?無論如何要阻止某個事件在另一個事件結束之前被解僱嗎?

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

@JonSkeet我改變了這個問題! – armin

+1

你還沒有改寫*好*。你可能不知道發生了什麼,但我仍然沒有。一個簡短的*完整的*程序展示了這個問題將有助於一件事 - 以及你想要達成的更清晰的陳述。 「使事件成爲原子」是*不是一個明確的陳述。請閱讀http://tinyurl.com/so-hints –

回答

2

SelectionChanged在處理RowsAdded因爲你造成了由內dataGridView1_RowsAdded改變當前單元格的SelectionChanged中間被激發。添加一行不會導致這兩個事件被觸發 - 您在處理第一個事件時正在導致第二個事件。 (事實上​​,你可能會導致SelectionChanged兩次,因爲處理程序中的兩行似乎都會改變選擇)。

如果你不想做dataGridView1_SelectionChanged運行時在RowsAdded處理程序,你需要或者暫時從事件退訂:

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

甚至更​​好,重新設計你的裏面的SelectionChanged做什麼處理程序,以便它適用於事件的所有實例。

0

您可以覆蓋要控制的事件,然後在覆蓋事件中添加if條件,並在觸發事件時將其控制,並在觸發事件時以及在何時不觸發事件。 馬赫迪