网上看到的一部分,然后自己测试,更新了其他的情况

SelectionChangeCommitted事件

在设定datasource和displaymember和valuemember时,以及手动改变combobox索引和值时都不触发该事件, 只是在界面选择combobox不同值时触发

SelectedIndexChanged事件  索引改变时触发

SelectedValueChanged事件   值改变时触发

 一、在数据源有数据,且写Form_Load事件中的情况下

顺序一:

this.comboBox1.DisplayMember = "userName";  (不触发)

this.comboBox1.ValueMember = "userAge";    (只触发SelectedValueChanged)

this.comboBox1.DataSource = dt; (都触发)

SelectedValueChanged触发两次(总是先触发)SelectedIndexChanged,触发一次 

顺序二:

this.comboBox1.ValueMember = "userAge";

this.comboBox1.DisplayMember = "userName";

this.comboBox1.DataSource = dt;

同上

 

顺序三:

this.comboBox1.DataSource = dt; (都触发)

this.comboBox1.DisplayMember = "userName";(都触发)

this.comboBox1.ValueMember = "userAge";(只触发SelectedValueChanged事件)

SelectedValueChanged触发三次(总是先触发)SelectedIndexChanged,触发两次 

 

顺序四:

this.comboBox1.DataSource = dt; (都触发)

this.comboBox1.ValueMember = "userAge";(都触发) 其中SelectedValueChanged触发两次

this.comboBox1.DisplayMember = "userName";(都触发)

SelectedValueChanged触发四次(总是先触发)SelectedIndexChanged,触发三次

 

 

 

 

 

 

二、在数据源有数据,且写窗口初始化事件中的情况下

无论在什么样的排序下

this.comboBox1.DataSource = dt; (都触发)

this.comboBox1.ValueMember = "userAge";(只触发SelectedValueChanged事件)

this.comboBox1.DisplayMember = "userName";(不触发)

SelectedValueChanged触发两次(总是先触发)SelectedIndexChanged,触发一次

 

 

三、在数据源无数据的情况下,无论写在Form_Load还是窗口初始化的界面中

顺序一:

this.comboBox1.DisplayMember = "userName";  (不触发)

this.comboBox1.ValueMember = "userAge";    (只触发SelectedValueChanged)

this.comboBox1.DataSource = dt; (不触发)

SelectedValueChanged触发一次(总是先触发)SelectedIndexChanged,触发零次 

顺序二:

this.comboBox1.ValueMember = "userAge";

this.comboBox1.DisplayMember = "userName";

this.comboBox1.DataSource = dt;

同上

 

顺序三:

this.comboBox1.DataSource = dt; (不触发)

this.comboBox1.DisplayMember = "userName";(只触发SelectedValueChanged)

this.comboBox1.ValueMember = "userAge";(只触发SelectedValueChanged事件)

SelectedValueChanged触发两次(总是先触发)SelectedIndexChanged,触发零次 

 

顺序四:

this.comboBox1.DataSource = dt; (不触发)

this.comboBox1.ValueMember = "userAge";(SelectedValueChanged触发两次) this.comboBox1.DisplayMember = "userName";(不触发)

SelectedValueChanged触发两次(总是先触发)SelectedIndexChanged,触发零次

 

 

 

 

四、comboBox2的绑定写在comboBox1的SelectedIndexChanged事件中

 

根据comboBox1绑定存放的位置comboBox2绑定的次数也不一样

如comboBox1绑定的位置为Form_Load中,则comboBox2绑定时的触发事件次数和comboBox1一样