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

4
我正在开发一个应用程序,需要一个带自动完成/建议(下拉)的文本框,以输入多个单词(由分隔符如空格分开),就像StackOverflow中的标签文本框一样。
例如,我开始输入“app”,它应该显示所有以 app 开头的建议列表中的单词,当我输入一个单词并按下空格键并开始输入新单词时,它应该显示所有部分单词的建议。
有没有示例供我查看?

还在寻找那个吗?我已经发布了我的示例,如果不够清晰,请留言,我会解释... - Ezi
1个回答

1

希望这可以帮到你。我正在使用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

嘿,谢谢。我修改了这个http://www.codeproject.com/KB/cs/AutoCompleteTextBox.aspx,使其具有逐字逐句的建议和许多其他功能。实际上,这是一次重写。我模仿了在此网站创建帖子时获得的“标签”文本框的行为。我试图将代码发布到该网站,但他们没有这个功能。 - Dasith Wijes
这是完整的代码http://www.codeproject.com/KB/cs/AutoCompleteTextBox.aspx?msg=3884491#xx3884491xx请查看评论部分获取我的更新后的代码。 - Dasith Wijes
谢谢你提供的链接,我也在做一个类似的项目。 - Ezi

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