WinForms组合框不删除项目

时间:2016-10-01 14:40:11

标签: c# winforms

我正在为学校编写一个WinForms应用程序,其中向用户显示一个标志,并且必须从comboBox中选择适当的国家/地区。我使用Flag类型的List作为comboBox的数据源...

List<Flag> flags;
comboBox.DataSource = flags;

转了之后,我从列表中删除了前一个标志并更新了comboBox DataSource ......

flags.Remove(currentFlag);
comboBox.DataSource = flags;

我发现该标志正在从列表中删除,但不会从comboBox中删除。我哪里错了?

2 个答案:

答案 0 :(得分:2)

这样做,

flags.Remove(currentFlag);
comboBox.DataSource = null;
comboBox.DataSource = flags;

答案 1 :(得分:0)

这里的根问题是ComboBox在数据源发生变化时没有收到任何类型的通知,所以很明显它没有视觉上刷新,因为它没有意识到发生的任何事情。

不太理想的解决方案是 Sajeetharan 建议的,要删除列表并再次添加。这迫使控件重新读取整个列表,因此它会捕获&#34;更改,删除现在丢失的项目。

更好的解决方案是使用适当的集合类型,为控件提供更改通知,并允许它根据需要重绘。这是BindingList<T> class的目的。在设置绑定的数据源而不是普通列表时,通常建议使用它。

简而言之,您的代码将成为:

    <uses-permission android:name="android.permission.CALL_PHONE" />

之后,您只需从中删除一个项目:

BindingList<Flag> flags = new BindingList<Flag>();
comboBox.DataSource = flags;

数据绑定引擎负责从组合中删除项目。