2010-06-03 117 views
1

此代碼會兩次觸發選擇更改事件。我怎樣才能防止它? 目前我正在使用標誌或集中屬性來防止這種情況。但實際的方式是什麼?DataGridView的SelectionChange事件即使在移除事件綁定後也會在DataBinding上觸發兩次

我使用它winfoms

編輯

我寫問題的錯誤,這裏是正確的代碼,我想問

private void frmGuestInfo_Load(object sender, EventArgs e) 
{ 
this.dgvGuestInfo.SelectionChanged -= new System.EventHandler(this.dgvGuestInfo_SelectionChanged); 
dgvGuestInfo.DataSource=dsFillControls.Tables["tblName"]; 
this.dgvGuestInfo.SelectionChanged += new System.EventHandler(this.dgvGuestInfo_SelectionChanged); 
} 

private void dgvGuestInfo_SelectionChanged(object sender, EventArgs e) 
{ 
//this function is raised twice, i was expecting that this will not be raised 
} 

回答

0

的每次設置 DataSource屬性時,事件都會觸發。

您應該只設置 DataSource一次。

您可能會添加兩次相同的事件處理程序。
用鼠標右鍵單擊dgvGuestInfo_SelectionChanged,然後單擊查找所有引用。

另外,請檢查事件處理程序中的調用堆棧。

+0

爲什麼會發生這種情況,怎麼可能避免。我甚至取消了事件,此刻我正在設置數據傳輸並在此之後重新綁定事件。那麼爲什麼它仍然會引發事件 – 2010-06-03 15:44:05

+0

你爲什麼要設置'DataSource'兩次?在處理程序中放置一個斷點,禁用「Just My Code」,然後查看調用堆棧。 – SLaks 2010-06-03 15:48:13

+0

另外,請確保您沒有添加處理程序兩次。右鍵單擊'dgvGuestInfo_SelectionChanged'並單擊查找所有引用。 – SLaks 2010-06-03 15:49:22

0

我有你一樣的問題:有時從SelectionChanged作品取消註冊,有時不會。

而且我註銷/在請嘗試重新註冊/ finally結構:

  this.SelectionChanged -= ManageSelectionChanged; 

      try 
      { 
       // code that could fire this.SelectionChanged 
      } 
      finally 
      {      
       this.SelectionChanged += ManageSelectionChanged;     
      } 

我選擇使用私有標誌太多,但......我還是很好奇。

相關問題