我有一个ComboBox。我希望它允许仅选择列出的项目。如何让它显示初始图例?
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"
使用此代码,ComboBox显示没有文本。
如果我删除了ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
句子,则显示ComboBox1.SelectedText = "Select Item"
中的文本,但用户可以在组合框中输入与listItems不匹配的其他值。
答案 0 :(得分:2)
确实,你仍然坚持使用Windows XP,这是非常不幸的。本机Windows实现(仅在Vista及更高版本下可用)非常灵活。在这种情况下,我不确定该推荐什么。我之前实际上已经看过这个完全相同的问题,并且没有办法让本机Windows实现在DropDownList
样式集的组合框上工作。
如果您已经开始在Windows XP中获得此功能,那么您将不得不在代码中编写自己的实现,这保证是丑陋的,我很遗憾地说。正如您所发现的,SelectedText
属性对具有DropDownList
样式集的组合框没有影响。您必须实际添加一个值为“选择项目”的项目,确保默认选中该项目,然后在用户首次选择后从列表中删除该项目。
我可能不得不建议您使用原生cue banner支持(当应用程序在Vista或更高版本上运行时),并且只回到您绝对必要的自定义实现(在XP上)
但如果是我,我会解决这个问题并采取完全不同的方法。以下是一些想法:
在这些新奇的“提示横幅”被发明之前很久就使用过的穷人的做法是简单地在组合框旁放置一个Label
控件。在该标签中,您可以显示所需的任何指令文本。它可能不是那么光滑或优雅,但它同样具有功能性。
只需设置预先选择默认值,即大多数情况下用户最有可能选择的默认值。将组合框设置为DropDownList
的技巧是,一旦选择了列表中的一个项目,用户就无法取消选择一个。也就是说,如果不从列表中选择新项目,他们就无法清除现有选择。 (你当然可以通过编程方式这样做,但在这种情况下这是无关紧要的。)因此,如果你预先选择一个默认值,那么他们必须做的事情很明显(选择一个),他们将永远不能明确选择不再显示的地方。
我认为在几乎所有情况下,都存在合理的违约。但即使没有(例如,“选择你的性别:男/女”),你可以简单地选择一个或另一个作为默认值,如果用户不正确,用户将足够精明地改变它。这就是我在所有应用程序中的使用方法。
当然,预先选择DropDownList
中值的唯一方法是通过代码。使用以下内容选择列表中的第一项:
myComboBox.SelectedIndex = 0
答案 1 :(得分:0)
我知道这个问题已经有几年了,并且有答案,但我有相同的要求,并想出了一个不同的解决方案。我想我应该链接到我的解决方案以防其他人遇到这个问题。它允许您在XP中的“只读”组合框中添加提示横幅。组合框使用默认样式(不是只读的),但您可以在代码和设计器中执行某些操作,使它们以只读方式运行,并保留您的提示横幅。有关详情,请参阅此处:https://stackoverflow.com/a/17869453/2340643