在ComboBox中禁用项目 C#

4

我已经找到了一个看起来非常简单的解决方案,可以在这里禁用ComboBox中某些项目。它说:

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

然而,如果我写入以下内容:

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

或者

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

在VS2010中会出现语法错误。也许这个函数已经在2005版本之后被禁用了?

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

\Test item

或者我写

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

然后它将出现带有反斜杠并且未禁用。

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


1
你提到的文章似乎与Visual FoxPro有关。 - Olivier Jacot-Descombes
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");

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


他链接的文档说明应该是可能的。 - Marcus Riemer
我怀疑在VS2005上可能是可以的,但现在不再受支持。 - John Laffoon
1
@MarcusRiemer 在VS2003-2005中支持过,但现在已不再支持。 - TrizZz
1
@TrizZz 因为你的最后一条评论而不是答案本身,我接受了这个答案。谢谢 :) - Andrius Naruševičius

3

更新 1: 这种方法行不通,但我保留原样是为了让下面的评论有意义。

更新 2: 回答你的问题...在进行了一些谷歌搜索后,我相信你的唯一选择是像你建议的那样创建自己的控件来实现这一点。

我怀疑处理以多个反斜杠开头的项的规则也适用于转义序列。如何尝试以下内容:

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

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


很遗憾,出现了“无法识别的转义序列”错误 :( - Andrius Naruševičius
如果您使用双斜杠括号,您只会在项目中得到斜杠括号。我喜欢那篇MSDN文章有无法编译的代码。 - Rawling
不幸的是,("\\]Test Item"); 显示为启用的 \]Test Item :( - Andrius Naruševičius
我终于有机会玩一下这个了。无论如何我都无法让它工作。我很惊讶这个功能被删除和/或更改了。总是有WPF!;) - John Laffoon

0
一般来说:您需要通过编写\\来转义反斜杠。否则,编译器会尝试将\T解释为转义序列(该序列不存在)。我猜设计师已经为您完成了这个操作,但您始终可以查看生成的源代码;)
关于禁用组合框项目:您链接的文档似乎适用于ListBoxes,而不是ComboBoxes。此外,它是指VisualFox Pro,而不是Windows.Forms。所以我想这行不通;)
根据这个讨论,您需要对控件进行子类化并覆盖其绘制处理程序。
但在这之前,我建议您简单地删除(甚至不添加)那些您希望禁用的项目。

然后该项看起来像\测试项,并且未被禁用。 - Andrius Naruševičius
已更新答案,看起来您在错误的控件文档上遇到了问题。 - Marcus Riemer
1
您可以从原始链接文章中跟随链接,进入ComboBox控件文档,其中包括禁用项目的相同指导。 - John Laffoon
是的,这是一个Visual FoxPro控件的文档! - Olivier Jacot-Descombes
哎呀,我又在回答中反映了这一点,我将把答案变成社区维基。 - Marcus Riemer
显示剩余3条评论

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