1. 程式人生 > >設置數據源時事件的觸發

設置數據源時事件的觸發

初始 exc ++ 執行 source commit family class combobox

SelectedIndexChanged和SelectedValueChanged可以通過編程更改屬性來觸發事件,SelectionChangeCommitted事件必須由用戶操作才能觸發。

在初始化時(設置源)SelectedIndexChanged和SelectedValueChanged都會被調用。

在不同的執行順序下,觸發的情況也不同:

順序一:

this.comboBox1.DisplayMember = "userName";(不觸發)
this.comboBox1.ValueMember = "userAge";(只觸發SelectedValueChanged)
this.comboBox1.DataSource = dt
;(都觸發)

順序二:

this.comboBox1.ValueMember = "userAge";(只觸發SelectedValueChanged)
this.comboBox1.DisplayMember = "userName";(不觸發)
this.comboBox1.DataSource = dt; (兩者都觸發)

順序三:

this.comboBox1.DataSource = dt; (都觸發)
this.comboBox1.DisplayMember = "userName";(都觸發)
this.comboBox1.ValueMember = "userAge";(只觸發SelectedValueChanged事件)

順序四:

this.comboBox1.DataSource = dt; (都觸發)
this.comboBox1.ValueMember = "userAge";(都觸發,其中SelectedValueChanged觸發兩次)
this.comboBox1.DisplayMember = "userName";(都觸發)

避免觸發事件的方式有以下兩種:

  1. 設置一個字段,通過判斷忽略前幾次的事件觸發
    int temp = 0;
    // code omited
    temp++; if(temp > 3) { // code omited }
  2. 取消事件的訂閱,然後再重新訂閱事件
    comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;//刪除事件
    // code omited
    comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;//重新訂閱事件

設置數據源時事件的觸發