三個事件的觸發(fā)條件和區(qū)別
SelectedIndexChanged事件
索引改變時即觸發(fā)嗎,可以通過編程觸發(fā)
SelectedValueChanged事件
值改變時觸發(fā),可以通過編程觸發(fā)
SelectionChangeCommitted事件
在設(shè)定datasource和displaymember和valuemember時,以及手動改變combobox索引和值時都不觸發(fā)該事件, 只是在界面選擇combobox不同值時觸發(fā),即只有通過界面點(diǎn)擊修改combobox的值才會觸發(fā)此事件
區(qū)別
1、SelectedIndexChanged和SelectedValueChanged可以通過編程的方式更改屬性而觸發(fā)事件,但SelectionChangeCommitted事件必須由用戶操作選定選項才能觸發(fā)。
2、在初始化時(設(shè)置源)SelectedIndexChanged和SelectedValueChanged都會被調(diào)用,而SelectionChangeCommitted沒有這個問題。
不同的代碼順序觸發(fā)的先后順序和次數(shù)
關(guān)于在編程時通過設(shè)置DataSource, DisplayMember, ValueMember不同順序均可觸發(fā)SelectedIndexChanged事件和SelectedValueChanged事件的次數(shù),但是不會觸發(fā)SelectionChangeCommitted
順序一
this.comboBox1.DisplayMember = "userName"; (不觸發(fā))
this.comboBox1.ValueMember = "userAge"; (只觸發(fā)SelectedValueChanged)
this.comboBox1.DataSource = dt; (都觸發(fā))
SelectedValueChanged觸發(fā)兩次(總是先觸發(fā))SelectedIndexChanged,觸發(fā)一次 (設(shè)置DisplayMember屬性時不觸發(fā)兩種事件)
順序二
this.comboBox1.ValueMember = "userAge"; (只觸發(fā)SelectedValueChanged)
this.comboBox1.DisplayMember = "userName";(不觸發(fā))
this.comboBox1.DataSource = dt; (兩者都觸發(fā))
同上,SelectedValueChanged觸發(fā)兩次(總是先觸發(fā))SelectedIndexChanged,觸發(fā)一次 (設(shè)置DisplayMember屬性時不觸發(fā)兩種事件)
順序三
this.comboBox1.DataSource = dt; (都觸發(fā))
this.comboBox1.DisplayMember = "userName";(都觸發(fā))
this.comboBox1.ValueMember = "userAge";(只觸發(fā)SelectedValueChanged事件)
SelectedValueChanged觸發(fā)三次(總是先觸發(fā))SelectedIndexChanged,觸發(fā)兩次 (設(shè)置DisplayMember屬性時不觸發(fā)兩種事件)
順序四:
this.comboBox1.DataSource = dt; (都觸發(fā))
this.comboBox1.ValueMember = "userAge";(都觸發(fā)) 其中SelectedValueChanged觸發(fā)兩次
this.comboBox1.DisplayMember = "userName";(都觸發(fā))
SelectedValueChanged觸發(fā)四次(總是先觸發(fā))SelectedIndexChanged,觸發(fā)三次 (設(shè)置DisplayMember屬性時不觸發(fā)兩種事件)
分析
說明:當(dāng)設(shè)置了DataSource 屬性后,SelectedValue 屬性值會默認(rèn)為第一行(所以會觸發(fā)SelectedIndexChanged事件和SelectedValueChanged事件),因此,如果不希望ComboBox自動選擇第一行,還需在設(shè)置完DataSource 后自行將SelectedValue 設(shè)為“”。
轉(zhuǎn)載:http://blog.csdn.net/gatieme/article/details/50405672
|