【问题标题】:Disabling item in a ComboBox C#禁用 ComboBox C# 中的项目
【发布时间】:2012-09-05 11:28:35
【问题描述】:

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

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

但是如果我写

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

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

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

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

\Test item

或者我写

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

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

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

【问题讨论】:

  • 你提到的那篇文章似乎与Visual FoxPro有关。

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


【解决方案1】:

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

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

使用这 3 种方式之一:

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

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

【讨论】:

  • 他链接的文档表明这应该是可能的。
  • 我怀疑 VS2005 有可能,但不再支持。
  • @MarcusRiemer VS2003-2005 支持,但不再支持
  • @TrizZz 由于您的最后评论而不是答案本身,因此接受了答案。谢谢你:)
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 不幸的是,错误是Unrecognized escape sequence :(
  • 如果你使用双斜线括号,你只会在项目中得到斜线括号。我喜欢 MSDN 文章中包含无法编译的代码。
  • 不幸的是,("\\]Test Item"); 显示为已启用的\]Test Item :(
  • 我终于可以玩弄这个了。我无法对此进行任何更改。我很惊讶功能被删除和/或更改。总是有 WPF! ;)
【解决方案3】:

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

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

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

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

【讨论】:

  • 那么该项目看起来像\Test item 并且未被禁用。
  • 更新了答案,好像你偶然发现了错误控制的文档。
  • 您可以点击原始链接文章中的链接,该链接将您带到 ComboBox 控件文档,其中包含有关禁用项目的相同指南。
  • 哦,是的,在那种情况下我似乎太快了。
  • 感谢您发现我的错误。我更新了问题中的链接:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-06
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 2023-03-12
相关资源
最近更新 更多