1、SelectedIndexChanged和SelectedValueChanged可以通过编程的方式更改属性而触发事件。

在初始化时(设置源)SelectedIndexChanged和SelectedValueChanged都会被调用,而SelectionChangeCommitted没有这个问题。

 

关于事件的触发

设置DataSource, DisplayMember, ValueMember不同顺序触发SelectedIndexChanged事件和SelectedValueChanged事件的次数

顺序一:

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

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

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

SelectedValueChanged触发两次(总是先触发)SelectedIndexChanged,触发一次 (设置DisplayMember属性时不触发两种事件)

顺序二:

this.comboBox1.ValueMember = "Code";

this.comboBox1.DisplayMember = "Name";

this.comboBox1.DataSource = dt;

同上

顺序三:

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

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

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

SelectedValueChanged触发三次(总是先触发)SelectedIndexChanged,触发两次 (设置DisplayMember属性时不触发两种事件)

顺序四:

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

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

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

SelectedValueChanged触发四次(总是先触发)SelectedIndexChanged,触发三次 (设置DisplayMember属性时不触发两种事件)

 

注意:当设置了DataSource 属性后,SelectedValue 属性值会默认为第一行(所以会触发SelectedIndexChanged事件和SelectedValueChanged事件),所以,

1.如果不希望ComboBox自动选择第一行,还需在设置完DataSource 后自行将SelectedValue 设为“”。

2.如果希望显示指定行,需要设置cmb_smstype.SelectedValue = "值";

posted on 2015-03-03 15:07  清风暮雨  阅读(2190)  评论(0)    收藏  举报