禁用ComboBox中的项目C#

时间:2012-09-05 11:28:36

标签: c# visual-studio-2010 combobox visual-studio-2005

我找到了一个简单的解决方案来禁用hereComboBox中的某些项目。它声明:

  

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

但是,如果我写

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

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

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

如果我通过像这样的VS2010设计师放置物品

\Test item

或者我写

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

然后出现反斜杠而不是禁用。

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

3 个答案:

答案 0 :(得分:5)

遗憾的是,组合框控制不可能。

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

使用以下三种方式中的一种:

// 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");

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

答案 1 :(得分:2)

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

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

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

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

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

答案 2 :(得分:0)

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

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

根据this discussion,您需要对控件进行子类化并覆盖其绘制处理程序。

但在此之前,我只想删除(或不添加)您想要禁用的项目。