【问题标题】:AutoComplete Textbox to detect if text is typed from user or appended from AutoComplete collection?自动完成文本框检测文本是从用户输入还是从自动完成集合附加?
【发布时间】:2017-04-19 17:23:12
【问题描述】:

我创建了一个带有 SuggestAndAppend 文本模式的自动完成文本框。我想检测文本框中的文本是用户新键入的,还是只是从源代码集中附加的?

当文本框失去焦点时可以检查,但有没有其他方法可以立即检测到焦点仍在文本框中?

有什么想法吗?

【问题讨论】:

  • 我认为KeyPressTextChanged 事件的组合将为您提供所需的信息。您可以将当前的Text 值存储在TextChanged 的一个字段中,将任何新的键盘输入存储在KeyPress 的另一个字段中,然后在下一个TextChanged 上比较当前的Text 以查看它是否是之前的Text 和键盘输入的结果与否。

标签: vb.net autocomplete textbox


【解决方案1】:

目前,我可以编写代码来实现该任务。现在,这段代码可以检测新输入的文本是否不是集合中任何项目的一部分。但是如果用户输入了一个新的文本,它可以被认为是集合中条目的一部分呢?即,如果集合包含以下条目怎么办:BBC、CNN、FOX New 并且用户只想输入 CN(卡通网络)..在这种情况下,“CN”将成为 CNN 的一部分,然后代码不会将其检测为新条目。

Private Sub TextBox1_TextChanged_1(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    Dim isNew As Boolean = True

    For i As Integer = 0 To TextBox1.AutoCompleteCustomSource.Count - 1
        If UCase(Trim(TextBox1.AutoCompleteCustomSource(i))) Like UCase(Trim(TextBox1.Text)) & "*" Then
            isNew = False
            Exit For
        End If
    Next

    If isNew = True Then
        MsgBox("Custome")
    Else

    End If
End Sub

如果文本框中的文本是新的集合或没有,下面的代码可以小鸡,暂时,它在离开事件中捕获它。也应该改进以捕获 [Enter] 键

Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
    Dim isNew As Boolean = True

    For i As Integer = 0 To TextBox1.AutoCompleteCustomSource.Count - 1
        If TextBox1.AutoCompleteCustomSource.Contains(UCase(Trim(TextBox1.Text))) Then
            isNew = False
        End If
    Next

    If isNew = True Then
        MsgBox("Custome")
    Else

    End If

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-08
    • 2012-11-14
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2010-09-22
    相关资源
    最近更新 更多