14

我正在尝试取消选择(空白)我的 Windows 窗体应用程序中的一些组合框。在我的应用程序中,我有一个 Reset 方法,它将每个组合的 SelectedIndex 设置为 -1。我所有的组合框都是数据绑定的,即每个组合框都使用数据源填充。

我注意到有时我的重置方法有效,即它取消选择当前选定的项目并使组合空白。但是,有时它会在我尝试将其设置为 -1 后直接选择第一项 (SelectedIndex = 0)。从用户的角度来看,这看起来像是一个错误,因为它并不总是“清除”表单。

根据 MSDN:

“要取消选择当前选定的项目,请将 SelectedIndex 设置为 -1。如果项目是数据绑定项目,则不能将 ComboBox 项目的 SelectedIndex 设置为 -1。”

有谁知道解决方法?

非常感谢

4

14 回答 14

26

使用 void 和 property 的组合

comboBox.ResetText();

 //to reset selected value
comboBox.SelectedIndex = -1;
于 2014-12-01T19:22:37.873 回答
8

不知道是否有人仍然对此感兴趣,因为现在已经 5 年了,但我找到了一个非常简单的解决方法。完全不直观(我只是通过查看参考源代码才发现它),但实现起来很简单:

ComboBox1.FormattingEnabled = True;

是的,这就是它的全部!

如果您很好奇,可以仔细阅读源代码以了解发生了什么。@CuppM 指出的错误的根本原因似乎是试图在数据源中设置位置:

if (!FormattingEnabled || SelectedIndex != -1) {
    this.DataManager.Position = this.SelectedIndex;
} 

我猜它应该只是 '&&' 而不是 '||' 在这种情况下,因为代码可能不应该将 Position 设置为无效值,而不管 FormattingEnabled 属性如何。

无论如何,它允许一个简单的解决方法。并且由于“格式”属性为空白时的默认行为是无操作的,因此您无需更改任何其他内容。它只是工作。:-)

(我应该注意,我只在 .NET 4.7 上尝试过这个,所以我不能说它是否适用于 .NET Framework 的早期版本。)

于 2017-08-31T04:47:04.937 回答
3

您可以尝试将选定的值或项目设置为nullNothing在 VB 中)

我不记得抛出异常的行为。但是,我确实记得在组合框通常通过数据绑定事件进行数据绑定后,我曾经在组合框中插入一个名为 -1, (None) 的值。我建议获取列表中的数据并将新值插入此列表。现在将组合绑定到列表。

于 2012-05-03T07:52:07.390 回答
1

只有以下代码对我有用,所以请尝试:

comboBox.ResetText();   //framework  4.0 
于 2014-08-27T16:13:47.123 回答
1

ComboBox1.SelectedItem = null;

于 2017-05-24T14:14:47.007 回答
1

对于仍在查看这篇旧帖子的任何人,我想从Hisham 的回答中添加一个注释。
确保在插入他的代码后清除您的列表。

comboBox.ResetText();

//to reset selected value
comboBox.SelectedIndex = -1;
comboBox.Items.Clear();
于 2021-07-09T18:04:11.260 回答
0

如果您的目标框架是 4.0 - 这是解决方案:

安装 .Net Framework 4.5(不要更改项目的目标框架,只需安装框架)。安装后,该行取消选择数据绑定组合框:

combobox.SelectedValue = 0;

我的值成员是“Id”int 主键自动增量,因此该字段不包含值 0。但是,这不适用于不支持 .net45 的 Windows 版本

于 2013-10-21T06:15:53.990 回答
0

尝试设置 [ComboBoxObj].SelectedIndex=-1; 这将使其为空值。-1 表示取消选择或取消组合框的值

谢谢

于 2013-12-05T10:09:45.040 回答
0

尝试分配或null属性。String.EmptySelectedValue

于 2012-05-03T07:52:10.997 回答
0

试试这行代码:

combobox1.Items.clear();

这个对我有用。

于 2020-07-17T07:02:26.600 回答
0

这个问题我已经有一段时间了,但是如果你使用:

'ComboBox.ResetText();'

它将使文本“”并使组合框中的项目不受影响。

我在我的应用程序中使用了以下代码

 private void UpdateComboBox(ComboBox Box, string Group, List<string> Numbers)
        {
              Box.Items.Clear();
              Box.BeginUpdate();            
              Box.Items.Add("<<Add Contact>>");
              foreach (string item in Numbers)
              {
                   if(item != "")
                        Box.Items.Add(item);
              }
          Box.EndUpdate();
          Box.ResetText();
        }

所以我最后运行该方法,一旦所有项目都在组合框中。

于 2017-01-07T09:37:31.060 回答
-1

将一个空项目添加到您的组合框中,如下所示:

cb.Items.Add("");

在此之后,您可以通过选择最后一个 cb 项目来取消选择您的组合框:

cb.SelectedIndex = cb.Items.Count - 1;

给你!

您的组合框中的最后一个位置将是空的,但它不会打扰您。会吗?:-)

于 2012-08-02T14:56:50.017 回答
-1

我收到以下错误:

位置 0 处没有行

当我设置ComboBox.SelectedItem-1.

替换为ComboBox.ResetText()工作正常。这是使用.Net 4.6.1,默认情况下使用VS 2013TextFormatting = TrueComboBoxes

于 2018-12-28T02:13:05.467 回答
-3

您可以尝试使用此解决方案..

dataGrid.DataSource = Nothing

dataGrid.DataBind()

希望它的帮助!..:D

于 2012-05-03T07:49:41.307 回答