設置數據源時事件的觸發
阿新 • • 發佈:2018-11-05
初始 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";(都觸發)
避免觸發事件的方式有以下兩種:
- 設置一個字段,通過判斷忽略前幾次的事件觸發
int temp = 0; // code omited
- 取消事件的訂閱,然後再重新訂閱事件
comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;//刪除事件 // code omited comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;//重新訂閱事件
設置數據源時事件的觸發