.net “显示组合框”;球杆横幅“;当DropDownStyle=DropDownList时

.net “显示组合框”;球杆横幅“;当DropDownStyle=DropDownList时,.net,windows,vb.net,winforms,combobox,.net,Windows,Vb.net,Winforms,Combobox,我有一个组合框。我希望它只允许选择列出的项目。如何让它显示初始图例 ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend ComboBox1.Items.Add("First

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

    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”
中的文本,但用户可以在组合框中输入与列表项不匹配的其他值。

事实上,很不幸的是,您仍然将目标锁定在Windows XP上。本机Windows实现(仅在Vista和更高版本下可用)非常灵活。在那种情况下,我真的不确定该推荐什么。实际上,我以前也研究过这个完全相同的问题,但是没有办法让本机Windows实现在带有
DropDownList
样式集的组合框上工作

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

我可能不得不建议您在可用的地方(当应用程序在Vista或更高版本上运行时)使用本机cue banner支持,并且只在绝对必要的地方(在XP上)使用自定义实现

但如果是我的话,我会放弃这个问题,采取完全不同的方法。以下是一些想法:

  • 在这些新型“提示横幅”发明之前很久,穷人就采用了这种方法,即在组合框旁边放置一个
    标签
    控件。在该标签中,您可以显示任何必要的指令文本。它可能没有那么光滑或优雅,但它同样实用

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

    我认为,在几乎所有情况下,都存在合理的违约。但即使没有(比如说,“选择你的性别:男/女”),你也可以简单地选择其中一个作为默认值,如果不适合用户,用户会很精明地进行更改。这就是我在所有应用程序中的实现方式

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

    myComboBox.SelectedIndex = 0
    

我知道这个问题已经提出了几年,并且有了答案,但我有相同的要求,并提出了不同的解决方案。我想我应该链接到我的解决方案,以防其他人遇到此问题。它允许您在XP中的“只读”组合框中添加提示横幅。组合框使用默认样式(不是只读的),但是您可以在代码和设计器中执行一些操作,使它们成为只读的,并且仍然保留提示横幅。详情请参见此处:

我不太清楚您所说的“初始图例”是什么意思。你的意思是你想让它预选第一个项目吗?或者你说的是“提示横幅”,这就是我尝试使用的
ComboBox1.SelectedText=“Select Item”
Hmm,好的。Windows Vista和更高版本对此具有内置支持,这在WinForms应用程序中非常容易使用。你还需要你的应用程序才能在Windows XP上运行吗?我不感到手足无措,它在XP中根本不会显示任何提示,它仍然会运行。随着时间的推移,这个问题会自行解决。谷歌CB_SETCUEBANNER.是的,我的意思是我在某种程度上同意Hans的观点。如果提示横幅在XP中出现不是绝对重要的,只需使用
CB_SETCUEBANNER
并使用它即可。如果您真的关心该功能在所有目标操作系统中的工作,那么“绞尽脑汁”就会出现。这是一个只有你才能做出的决定,这就是为什么我要问问题。考虑到目前的情况,我只是尽力给出最好的答案。