VB.Net WinForms:ComboBox设为DropDownList时上下箭头为何不触发TextChanged?
问题原因
当ComboBox设置为DropDownList样式时,它的Text属性处于只读状态:
- 鼠标点击选择选项时,WinForms框架会做特殊处理,模拟Text属性的变更来触发
TextChanged事件; - 但用上下箭头键切换选项时,系统仅更新
SelectedIndex或SelectedItem属性,不会去修改只读的Text属性,因此TextChanged事件不会被触发。
而DropDown样式下,ComboBox的Text属性是可编辑的,切换选项时系统会同步更新Text值,所以TextChanged事件能正常触发。
解决方案
既然必须使用DropDownList样式,最合理的做法是改用SelectedIndexChanged事件来监听选项变更——这是该模式下专门用于响应选中项变化的事件,无论通过鼠标还是键盘操作切换选项,只要选中项改变就会触发。
如果你的业务逻辑必须基于TextChanged事件来实现,也可以在SelectedIndexChanged事件中手动触发TextChanged,示例代码如下:
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged ' 执行原本在TextChanged中的逻辑,或者手动触发事件 RaiseEvent TextChanged(Me, EventArgs.Empty) End Sub
内容的提问来源于stack exchange,提问作者Shishir Wahi
相关产品推荐
相关产品推荐

