如何清空一个下拉框?

72

我有一些下拉列表框,用户可以在其中选择一个数字。我还有一个“清除”按钮,应该清除下拉列表框中的文本,但我似乎无法实现。我尝试过:

 //doesn't work
 cboxHour.Text = "";

并且

//doesn't work
cboxHour.ResetText();

这似乎应该是非常简单的,但我就是没弄明白。


18个回答

138

你尝试过cboxHour.Items.Clear()吗?


2
那就是获胜者。我会在可以的时候将你标记为被选中的答案。 - Fuzz Evans
16
如果你的ComboBox绑定了数据,那么在清空之前请设置comboBoxName.DataSource = null。 - Haseeb Jadoon
这可能是不够的。如下面@beanmf所回答的,调用ResetText()也很可能是必需的。 - David Carr
如果使用组合框的“DataSource”属性,则必须按如下方式分配null:modeComboBox.DataSource = null; (modeComboBox.DataSource = new BindingSource(dict, null);) - Park JongBum

92

如果您只想清除当前选择,但保留列表中的所有项目,则可以使用:

cboxHour.SelectedIndex = -1

4
当我使用这个功能时,会触发SelectedIndexChanged事件。在SelectedIndexChanged事件中,如果SelectedIndex为-1,我会退出该事件。 - Jim Lahman

24

ComboBox没有数据绑定时,我发现我需要同时使用:Clear()用于移除项目,但仍保留SelectedItem的文本,而ResetText()则会移除该文本。 VS2008

ComboBox.Items.Clear();
ComboBox.ResetText();

1
同意以上观点。我在 VS2013 中也遇到了同样的问题,其中 4 次调用 Items.Clear()、SelectedIndex=-1、SelectedText=string.empty 和 SelectedText=string.empty 是不足够的。使用 Items.Clear() 后跟 ResetText() 解决了问题。 - David Carr

15
您可以使用

Cbo.Items.Clear();
或者
Cbo.DataSource = null;

如果你对它进行了绑定。


8

你的问题的答案是:

metroComboBox1.SelectedItem = null;
anycomboBox1.SelectedItem=null;

1
combox.items.clear()会删除列表中的项目,而将选定的项目设置为null则会清除所选数据。非常好,谢谢。 - kakkarot
1
如果您无法将索引设置为-1,请尝试将SelectedItem设置为null或nothing。这对我有用。 - Rob
这是真正的答案。它还解决了我在.ResetText上遇到的问题 - 那时,我无法通过编程重新加载选择。但.SelectedItem = null就可以解决问题。太棒了!谢谢! - Matt

5
如果您已经为组合框应用了数据源,那么它将不会被清除,如。
为此,您需要将数据源分配给组合框。
cmb.DataSource = null;
cmb.Items.Clear();

5
cboxHour.Items.Clear();

这个可行


1
你能详细阐述一下你的答案吗?如果你能在回答中提供一些背景信息,那就太好了。 - Jeff Tratner

4

如果您的组合框有值绑定部分,请使用以下代码清除其值:

cboxHour.SetSelectedIndex(-1);

2

虽然这段代码可能解决了问题,但是包括解释这个问题如何以及为什么被解决会有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案,添加解释并指出适用的限制和假设。 - double-beep

1
我的工作是:
ComboBox.removeAllItems();

如果阅读起来不太顺畅,就移除所有的项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接