我希望能够在显示列表时正确更新Combobox列表项 .

我在DropDownList模式下使用所有可用的串行端口填充Combobox . 我订阅了“Device Changed”事件并在事件处理程序中更新了这个ComboBox . 如果当前选择的端口不再可用(即,用户拔掉USB串行端口),那么我希望当前选择通过执行combobox1.Text =“”或combox1.SelectedIndex = -1来显示空白字符串 . 这在大多数情况下都非常有用,除非在用户单击Combobox并显示列表时进行更新 .

例如,如果当前列表包含“Com1”,“Com2”和SelectedIndex设置为-1(因此当前选择显示为空白),并且用户单击Combobox以打开列表,并且不会将鼠标向下移动以选择任何内容 . 然后在用户再次单击以关闭列表之前,他/她拔出Com1 . 现在触发更新,我可以看到列表更新现在只显示“Com2”,当前选定的文本显示为空白 .

但是,当用户再次点击Combobox(没有从列表中选择任何内容)来关闭列表时,.Net将选择Com2(这是列表中的第一项),而不是将SelectedIndex保留为-1并且当前选择在空白 . 我不明白那里发生了什么 . 更奇怪的是,它似乎在第一次将当前所选文本保留为空白,并且在启动我的应用程序后的第一次或第二次之后默认仅选择第一项 .

如果我将控件配置为DropDown模式,那么在用户关闭列表后它确实将当前选择保留为空,但SelectedIndex设置为0.虽然这看起来像.net中的某种bug(或功能),但是对这个解决方案来说还不错,但是有人能告诉我,我正在做的事情是否正常,以后它会如何运作?是否有关于如何在列表显示时正确更新组合框列表的文档?