我找到了一个简单的解决方案来禁用here中ComboBox
中的某些项目。它声明:
您可以通过添加单个项来禁用列表框或组合框中的项目 反斜杠到表达式的开头。
但是,如果我写
testBox.Items.Add("\Test item");
或
testBox.Items.Add(\"Test item");
它在VS2010中给出语法错误。也许这个功能在2005年以后的版本中被禁用了?
如果我通过像这样的VS2010设计师放置物品
\Test item
或者我写
testBox.Items.Add("\\Test item");
然后出现反斜杠而不是禁用。
因此我的问题是:这种方法是否可用,我只是无法理解如何使用它,或者我必须创建一个自定义ComboBox来实现我的目标(标题中)?
答案 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,您需要对控件进行子类化并覆盖其绘制处理程序。
但在此之前,我只想删除(或不添加)您想要禁用的项目。