C# C在下拉列表时添加/删除组合框项时出现意外行为

C# C在下拉列表时添加/删除组合框项时出现意外行为,c#,combobox,C#,Combobox,我希望能够在列表显示时正确更新组合框列表项 我正在用所有可用的串行端口填充DropDownList模式下的组合框。我订阅了设备更改事件并在事件处理程序中更新此组合框。如果当前选择的端口不再可用,即用户拔下USB串行端口,则我希望通过执行combobox1.Text=或combox1.SelectedIndex=-1,当前选择显示一个空白字符串。这在大多数情况下都非常有效,除了当用户单击组合框并显示列表时出现更新 例如,如果当前列表包含Com1、Com2,并且SelectedIndex设置为-1,

我希望能够在列表显示时正确更新组合框列表项

我正在用所有可用的串行端口填充DropDownList模式下的组合框。我订阅了设备更改事件并在事件处理程序中更新此组合框。如果当前选择的端口不再可用,即用户拔下USB串行端口,则我希望通过执行combobox1.Text=或combox1.SelectedIndex=-1,当前选择显示一个空白字符串。这在大多数情况下都非常有效,除了当用户单击组合框并显示列表时出现更新

例如,如果当前列表包含Com1、Com2,并且SelectedIndex设置为-1,则当前选择显示为空,用户单击组合框打开列表,并且不向下移动鼠标选择任何内容。然后,在用户再次单击关闭列表之前,他/她拔下Com1。现在一个更新被触发,我可以看到列表更新到现在只显示Com2和当前选择的文本显示空白

但是,当用户再次单击组合框而不从列表中选择任何内容以关闭列表时,.Net将选择Com2,它是列表中的第一项,而不是将SelectedIndex保留为-1,将当前选择保留为空。我不明白那里发生了什么。更奇怪的是,它似乎在第一次将当前选定的文本保留为空白,并且在启动应用程序后的第一次或第二次默认情况下仅选择第一项


如果我将控件配置为下拉模式,则在用户关闭列表后,它会将当前选择保留为空白,但SelectedIndex设置为0。虽然这看起来像是.net中的某种bug或功能,但我对这个解决方案还可以,但是有人能告诉我我现在做的是否可以,将来是否可以这样工作吗?是否有任何文档说明如何在显示列表时正确更新组合框列表?

Hm,我不确定,但我认为“正确”的方法是先关闭下拉列表,然后更新,然后重新打开。。事实上,如果在显示项目时弄乱了项目,控件崩溃,我也不会感到惊讶。我正在使用control.Invoke更新GUI线程中的列表。那应该可以不?它还没有崩溃。可以先关闭然后再重新打开吗?听起来对用户来说是件坏事。谢谢TaW。效果很好。只需将DroppedDown设置为false,然后再设置为true。这是正确的方法,对吗?我想是的。用户体验:除非你一直这么做,否则我认为最好是在用户查看数据时更改数据。。