2016-08-08 73 views
1

這是我的項目:WinForms BindingSource PositionChanged事件引發兩次

在項目中創建一個新窗體。然後創建兩個按鈕和一個綁定源。

爲Button1寫這樣的代碼:

private void button1_Click(object sender, EventArgs e) 
{ 
    List<int> lst = new List<int>(); 
    lst.Add(1); 
    lst.Add(3); 
    lst.Add(3); 

    this.bindingSource1.DataSource = lst; 
} 

爲BUTTON2寫這樣的代碼:

private void button2_Click(object sender, EventArgs e) 
{ 
    this.bindingSource1.DataSource = null; 
} 

然後添加一個PositionChanged事件BindingSource的,寫這個代碼:

private void bindingSource1_PositionChanged(object sender, EventArgs e) 
{ 
    MessageBox.Show("hi"); 
} 

運行該應用程序並按下按鈕1。在button1中,我們將DataSource設置爲列表,並且PositionChanged正常啓動。沒關係。

然後按下按鈕2。我們只需將DataSource設置爲空。但它顯示了兩條消息。您看到PositionChanged事件被觸發兩次。

如果你也寫this.bindingSource1.Clear();,也會出現這種情況。

這是怎麼發生的?

回答

0

「爲什麼」將通過檢查BindingSource類的源代碼。

它看起來像清除或設置數據源爲空使得多次調用來提高PositionChanged事件。爲了避免在代碼中出現問題,只需在清除DataSource之前解除事件,然後再次重新連接事件:

bindingSource1.PositionChanged -= bindingSource1_PositionChanged; 
bindingSource1.DataSource = null; 
bindingSource1.PositionChanged += bindingSource1_PositionChanged;