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 = "值";
浙公网安备 33010602011771号