Vb.net 支持分隔符的.net自动完成文本框

Vb.net 支持分隔符的.net自动完成文本框,vb.net,text,autocomplete,Vb.net,Text,Autocomplete,我正在开发一个应用程序,它需要一个文本框,其中包含多个单词的自动完成/建议(下拉),如StackOverflow中的tags文本框 例如,我开始键入“app”,它应该显示建议列表中以app开头的所有单词,当我输入一个单词并按空格键并开始键入一个新词时,它应该显示该部分单词的所有建议 有没有一个例子可以让我看一下?我希望这有帮助。。我使用的是developer express工具,但常规的.net组件也可以使用同样的工具 Private Sub txtToEmail_EditValueChange

我正在开发一个应用程序,它需要一个文本框,其中包含多个单词的自动完成/建议(下拉),如StackOverflow中的tags文本框

例如,我开始键入“app”,它应该显示建议列表中以app开头的所有单词,当我输入一个单词并按空格键并开始键入一个新词时,它应该显示该部分单词的所有建议


有没有一个例子可以让我看一下?

我希望这有帮助。。我使用的是developer express工具,但常规的.net组件也可以使用同样的工具

Private Sub txtToEmail_EditValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtToEmail.EditValueChanged
    Try
        Dim Emails As New List(Of String)
        Emails.Add("123@abc.com")
        Emails.Add("456@dfg.com")
        Emails.Add("abc@123.com")
        Emails.Add("dfg@456.com")

        Dim Txt = Trim(CStr(txtToEmail.EditValue))

        Dim Suggestions As IEnumerable(Of String)

        If Txt <> "" Then
            If Txt.IndexOf(",") = -1 Then
                Suggestions = From c In Emails Where c.StartsWith(Txt) Select c
            Else
                Dim lastIndex = Txt.LastIndexOf(",")
                Dim lastWord = Trim(Txt.Substring(lastIndex + 1))
                Suggestions = From c In Emails Where c.StartsWith(lastWord) Select c
            End If

            EmailList.Items.Clear()

            For Each r In Suggestions
                EmailList.Items.Add(r)
            Next

        End If

        If EmailList.ItemCount > 0 Then
            EmailList.Visible = True
        End If

    Catch ex As Exception
        ShowErrorBox(ex)
    End Try

End Sub

Private Sub EmailList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EmailList.Click
    Try
        If EmailList.SelectedValue = Nothing OrElse EmailList.SelectedValue = "" Then Return

        Dim Txt = CStr(txtToEmail.EditValue)

        If Txt.IndexOf(",") = -1 Then
            txtToEmail.EditValue = EmailList.SelectedValue
        Else
            Dim lastIndex = Txt.LastIndexOf(",")
            txtToEmail.EditValue = Txt.Substring(0, lastIndex + 1) & EmailList.SelectedValue
        End If

        txtToEmail.Focus()
        txtToEmail.SelectionStart = CStr(txtToEmail.EditValue).Length

        EmailList.Visible = False
    Catch ex As Exception
        ShowErrorBox(ex)
    End Try

End Sub
Private Sub txtToEmail\u EditValueChanged(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理txtToEmail.EditValueChanged
尝试
将电子邮件变暗为新列表(字符串)
电子邮件。添加(“123@abc.com")
电子邮件。添加(“456@dfg.com")
电子邮件。添加(“abc@123.com")
电子邮件。添加(“dfg@456.com")
Dim Txt=Trim(CStr(txtToEmail.EditValue))
Dim建议为IEnumerable(字符串)
如果是“Txt”,则
如果Txt.IndexOf(“,”)=-1,则
建议=来自电子邮件中的c,其中c.StartsWith(Txt)选择c
其他的
Dim lastIndex=Txt.LastIndexOf(“,”)
Dim lastWord=Trim(Txt.Substring(lastIndex+1))
建议=来自电子邮件中的c,其中c.StartsWith(lastWord)选择c
如果结束
EmailList.Items.Clear()
对于建议中的每个r
EmailList.Items.Add(r)
下一个
如果结束
如果EmailList.ItemCount>0,则
EmailList.Visible=True
如果结束
特例
淋浴箱(ex)
结束尝试
端接头
私有子电子邮件列表\单击(ByVal发件人作为System.Object,ByVal e作为System.EventArgs)处理电子邮件列表。单击
尝试
如果EmailList.SelectedValue=Nothing或Else EmailList.SelectedValue=“”则返回
Dim Txt=CStr(txtToEmail.EditValue)
如果Txt.IndexOf(“,”)=-1,则
txtToEmail.EditValue=EmailList.SelectedValue
其他的
Dim lastIndex=Txt.LastIndexOf(“,”)
txtToEmail.EditValue=Txt.Substring(0,lastIndex+1)&EmailList.SelectedValue
如果结束
txtToEmail.Focus()
txtToEmail.SelectionStart=CStr(txtToEmail.EditValue).Length
EmailList.Visible=False
特例
淋浴箱(ex)
结束尝试
端接头

还在找那个吗?我发布了我的样本,如果不够清晰,请发表评论,我会解释…嘿,谢谢。我修改了它,让它有逐字逐句的建议和更多的东西。这实际上是一次重写。我模仿了你在这个网站上创建帖子时“标签”文本框的行为。我试图将代码发回该网站,但他们没有该功能。这是完整的代码。有关我更新的代码,请参阅评论部分。感谢该链接,我也正在处理类似的项目。