在文本框中实现Vb.net + 自动完成功能

4

我在阅读VB.NET中文本框的自动完成功能,但是我不太明白这些内容存储在哪里?它是完全内置的功能,还是我需要编写一些代码使其工作?我找到了文本框的AutoCompleteModeAutoCompleteSource属性。但我想将我在文本框中输入的任何内容附加到自动完成源上。我要将源连接到My.Settings或其他东西吗?我也需要使用数组吗?感谢您的帮助 :)


填充文本框的AutoCompleteCustom源,添加和删除条目: 请参阅此文章 - AvS
2个回答

5
您需要手动向自动完成数据源添加新条目...考虑一下,这是有道理的:当新输入应该添加到建议列表中以及输入文本仅为临时内容时,Windows Forms如何知道?

您可以在输入字段验证时添加新值,或者当用户按下“OK / Apply”按钮时,或者任何最适合您需求的时间。但是,您必须自己执行此操作。

您已经发现的属性是正确的。

Dim suggestions As New List(Of String)
suggestions.Add("Abba")
suggestions.Add("Nirvana")
suggestions.Add("Rolling Stones")
...
textBox.AutoCompleteSource = suggestions

您可以将AutoCompleteSource绑定到几乎任何东西,这与数据绑定非常相似。需要注意的一点是,如果您正在向自动完成数据源添加新条目,则如果您的数据源没有实现INotifyCollectionChanged接口,UI控件可能不会立即注意到。


好的,那么这些信息存储在哪里?我可以将它存储在 My.Settings 中吗? - Kenny Bones
@Kenny。是的。您可以将它存储在任何方便的地方。 - Alex Essilfie
我无法弄清语法。Dim suggestions As New List(Of String) = { "Abba", "Nirvana", "Rolling Stones" } 运行不好。我得到了一个“需要语句结束”的错误提示。 - Kenny Bones
很好的字符串选择;) 不过我会选择披头士、滚石和ABBA,哈哈;) - Kenny Bones
@Kenny:你试图使用Array初始化一个List,但这是不可能的。不过,你可以先初始化一个Array,然后使用它来初始化List,像这样:Dim suggestions As List(Of String) = New List(Of String)(New String() {"Abba", "Nirvana", "Rolling Stones"}) - Hans Olsson
@Kenny,抱歉,我确实语法有误。我总是在VB.NET上挣扎一段时间,直到我弄清楚为止。已更正! - stakx - no longer contributing

2

首先创建列表以用作自定义来源。

Dim MySource As New AutoCompleteStringCollection()

然后设置文本框的属性

With MyTextbox
   .AutoCompleteCustomSource = MySource
   .AutoCompleteMode = AutoCompleteMode.SuggestAppend
   .AutoCompleteSource = AutoCompleteSource.CustomSource
End With

将此代码放在事件监听器中,您用于验证输入字段的位置,例如 btnOK.Click。
Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
    MySource.Add(txtinput.text)
End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接