2010-07-06 38 views
2

我在文本框(实际上是ToolStripTextBox)上使用了自动完成属性。这是工作正常,除非它不显示,直到我键入至少一个字符。我如何做到这一点,即使文本框是空的,这些建议也会显示出来?如何使TextBox上的自动完成显示空时的建议

Mode = Suggest 
Source = CustomSource 

来源progamatically设置和限制为10个项目

另外,如果有人知道如何迫使建议就可能是一个解决办法

+0

它使用您当前的输入来减少显示的可能性列表。如果你没有在文本框中输入任何内容,那么可能的列表是无限的。如果它不是无限的(因为你有一个有限的列表),那么也许你应该考虑使用自动完成组合框代替? – slugster 2010-07-06 11:16:36

+0

我的设置始终限制为最多10个 – 2010-07-06 11:28:40

回答

1

在.net api中没有这种可能性。在.net内部使用的shell接口的IAutoComplete中更多不存在这种可能性。

所以你应该忍受它,或实施你自己的自动完成行为,而不使用默认行为。你可以使用前面提到的组合框下拉菜单,甚至创建自己的自动完成控件(在我的应用程序中,我选择了最后一个变体)。

3

中的OnEnter事件编程表明我不知道,如果有任何解决方案,特别是因为如果您删除TextBox中的所有文本,建议框将自动关闭。

一种解决方法可能是有ComboBox重叠TextBox,你可以有一个显示所有的选项,但如果选择了其中的一个,或者如果事情是输入你自动切换到TextBox和显示,来代替。
虽然我建议在这种情况下,我可能会考虑完全摆脱TextBox,并坚持使用ComboBox,因为这就是它的原因。

要在ComboBoxSendMessage API和消息CB_SHOWDROPDOWN编程显示下拉(如果我没记错的话,你可以使用相同的API /消息,但使用不同的参数以编程方式关闭它,如果这是需要的为好)。

4

考虑到这是一个黑客。我设法解决了这个问题,并且缺乏API功能来做一件微不足道的事情。我会用代码告诉你:

dim source as AutoCompleteStringCollection = new AutoCompleteStringColection() 
    dim values() as String = new String() {" Monday", _ 
              " Tuesday", _ 
              " Wednesday", _ 
              " Thursday", _ 
              " Friday", _ 
              " Saturday", _ 
              " Sunday" } 
    TextBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend 
    TextBox1.AutoCompleteSource = AutoCompleteSource.CustomSource 
    TextBox1.AutoCompleteCustomSource = source 

也就是说,在自动完成列表中的每个字符串前面加一个空格。然后,这是你对这个事实的了解,并将其用于你方便的目标。

例如,您可以在单击,聚焦等时在TextBox中添加空格(注意,这可以用任何字符完成)。想法是要知道自动完成列表中的每个字符串都以相同的字符开头)

必须意识到这一点。实际上,考虑扩展TextBox表单并管理输入字符串的正确修剪。

再次,这个建议或不是由你自己决定。这个答案往往会解决的问题是想要一个TextBox下降的建议列表,而不开始键入API的限制,也称为解决方法或丑陋的

+0

注意:如果您对文本内容进行了正确的修改,效果会更好。 – Sebastian 2012-07-12 21:24:51

+0

有趣的方法。您可能还需要防止用户删除前导空间。当然比实现自己的自动完成行为容易得多。 – 2012-07-13 07:39:02

+1

确实。我的'ExtendedTextBox'所做的是使用'AutoCompletCustomSource'或提供的'RegEx'验证输入(我可以使用'ComboBox',但我重用了一个扩展的文本框,它提供了一个图标来提供关于输入的视觉反馈) 。 当丢失焦点并且没有有效输入时,我清除文本。当输入并且没有有效的输入时,清除文本'My.Computer.keyboard.SendKeys(“”)'和'Sendkeys.flush()'。 获取输入字符串的属性确实如此:'TextBox1.Text.TrimStart(“”)' 同样,输入必须谨慎处理。 – Sebastian 2012-07-13 20:05:07

相关问题