【问题标题】:Display ComboBox "Cue Banner" when DropDownStyle = DropDownList当 DropDownStyle = DropDownList 时显示组合框“提示横幅”
【发布时间】:2011-08-21 14:46:53
【问题描述】:

我有一个组合框。我希望它只允许选择列出的项目。如何让它显示初始图例?

    ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
    ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems
    ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend

    ComboBox1.Items.Add("FirstItem")
    ComboBox1.Items.Add("SecondItem")
    ComboBox1.Items.Add("ThirdItem")

    ComboBox1.SelectedText = "Select Item"

使用此代码,组合框将显示为没有文本。 如果我删除ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList 语句,则显示ComboBox1.SelectedText = "Select Item" 中的文本,但用户可以在组合框中输入与listItems 不匹配的其他值。

【问题讨论】:

  • 我不太确定您所说的“初始图例”是什么意思。你的意思是你希望它预先选择第一个项目吗?还是您在谈论"cue banner"
  • 一个“提示横幅”,这就是我尝试使用ComboBox1.SelectedText="Select Item"
  • 嗯,好的。 Windows Vista 及更高版本对此具有内置支持,这在 WinForms 应用程序中非常容易使用。您仍然需要您的应用程序才能在 Windows XP 上运行吗?
  • 我不明白,它根本不会在 XP 中显示提示,它仍然会运行。随着时间的推移,这个问题会自行解决。谷歌 CB_SETCUEBANNER。
  • 是的,我的意思是我在某种程度上同意汉斯的观点。如果提示横幅出现在 XP 中不是绝对重要的,只需使用 CB_SETCUEBANNER 并使用它。如果您真的关心该功能在所有目标操作系统上的工作,那么“手忙脚乱”就会出现。这是只有你才能做出的决定,这就是我问问题的原因。鉴于情况,我只是想给出最好的答案。

标签: .net windows vb.net winforms combobox


【解决方案1】:

确实,很遗憾您仍然停留在 Windows XP 上。本机 Windows 实现(仅在 Vista 和更高版本下可用)非常巧妙。在这种情况下,我不确定该推荐什么。实际上,我之前已经研究过这个完全相同的问题,只是没有办法让原生 Windows 实现在具有 DropDownList 样式集的组合框上工作。

如果您打算在 Windows XP 中获得此功能,那么您将不得不在代码中编写自己的实现,这肯定是丑陋的,我很抱歉地说。正如您所发现的,SelectedText 属性对具有DropDownList 样式集的组合框没有影响。您必须实际添加一个值为“Select Item”的项目,确保默认选中它,然后在用户进行第一次选择后从列表中删除该项目。

我可能不得不建议您在可用的情况下使用本机提示横幅支持(当应用在 Vista 或更高版本上运行时),并且仅在绝对必要的情况下(在 XP 上)回退到您的自定义实现.

但如果是我,我会解决问题并采取完全不同的方法。这里有几个想法:

  • 在这些新奇的“提示横幅”被发明之前很久就使用了穷人的方法,就是在组合框旁边简单地放置一个Label 控件。在该标签中,您可以显示任何必要的说明文本。它可能没有那么圆滑或优雅,但同样实用。

  • 只需将 pre-select 设置为默认值,这是用户在大多数情况下最有可能选择的值。将组合框设置为 DropDownList 的技巧是,一旦选择了列表中的一项,用户就无法取消选择一项。也就是说,如果不从列表中选择新项目,他们就无法清除现有选择。 (您当然可以以编程方式执行此操作,但在这种情况下无关紧要。)因此,如果您预先选择了一个默认值,那么他们必须做什么(选择一个)就很明显了,而且他们永远无法做到再次将选择清除到不明显的位置。

    我认为在几乎所有情况下,都有一个合理的默认值。但即使没有(例如,“选择您的性别:男性/女性”),您也可以简单地选择一个或另一个作为默认值,如果它对他们来说不正确,用户将足够精明地更改它。这就是我在所有应用程序中的做法。

    DropDownList 中预先选择值的唯一方法当然是通过代码。使用类似以下的内容来选择列表中的第一项:

    myComboBox.SelectedIndex = 0
    

【讨论】:

    【解决方案2】:

    我知道这个问题是几年前的问题并且有答案,但我有相同的要求并提出了不同的解决方案。我想我应该链接到我的解决方案,以防其他人遇到这个问题。它允许您向 XP 中的“只读”组合框添加提示横幅。组合框使用默认样式(不是只读的),但您可以在代码和设计器中做一些事情,使它们以只读方式运行,并且仍然保留您的提示横幅。详情见这里:https://stackoverflow.com/a/17869453/2340643

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2016-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多