4

ComboBox我发现在这里禁用某些项目似乎是一个简单的解决方案。它指出:

您可以通过在表达式的开头添加一个反斜杠来禁用列表框或组合框中的项目。

但是,如果我写

testBox.Items.Add("\Test item");

或者

testBox.Items.Add(\"Test item");

它在 VS2010 中给出了语法错误。也许这个功能在 2005 年以后的版本中被禁用了?

如果我像这样通过 VS2010 设计器放置一个项目

\Test item

或者我写

testBox.Items.Add("\\Test item");

然后它会出现一个反斜杠,而不是被禁用。

因此我的问题是:这种方法是否可用,我只是不明白如何使用它,或者我必须创建一个自定义 ComboBox 来实现我的目标(在标题中)?

4

3 回答 3

6

可悲的是,组合框控件不可能。

我建议从组合框列表中删除该项目,而不是尝试禁用它。

使用这三种方式之一:

// To remove item with index 0:
comboBox1.Items.RemoveAt(0);
// To remove currently selected item:
comboBox1.Items.Remove(comboBox1.SelectedItem);
// To remove "Tokyo" item:
comboBox1.Items.Remove("Tokyo");

如果您绝对需要禁用项目,则需要创建一个自定义组合框。

于 2012-09-05T11:38:58.107 回答
3

更新 1: 这不起作用,但我将其保留原样,因此下面的评论是有意义的。

更新2: 回答你的问题......经过一番谷歌搜索后,我相信你使用WinForms实现这一目标的唯一选择是按照你的建议创建你自己的控件。

我怀疑处理以多个反斜杠开头的项目的规则也适用于转义序列。怎么样:

testBox.Items.Add("\]Test Item");

我无法对其进行测试,但看起来它应该可以工作。

于 2012-09-05T11:37:24.637 回答
0

一般来说:您需要通过编写来转义反斜杠\\。否则,编译器会尝试将其解释\T为转义序列(不存在)。我猜设计师已经为你做了这个,但你可以随时查看生成的源代码;)

关于禁用组合框项目:您链接的文档似乎适用于 ListBoxes,而不是 ComboBoxes。此外,它指的是 VisualFox Pro,而不是 Windows.Forms。所以我想这行不通;)

根据这个讨论,您将需要对控件进行子类化并覆盖其绘制处理程序。

但在此之前,我会简单地删除(甚至不添加)您希望禁用的那些项目。

于 2012-09-05T11:30:26.130 回答