2017-04-19 62 views
0

我已经使用SuggestAndAppend文本模式创建了一个自动完成文本框。我想检测文本框中的文本是由用户新输入的,还是仅从源集合追加的?自动完成文本框检测文本是从用户键入还是从自动完成集合追加?

它可以检查文本框松散焦点时,但有没有另一种方式立即检测焦点仍然在文本框?

有什么想法吗?

+0

我会认为'KeyPress'和'TextChanged'事件的组合会给你你需要的信息。您可以将当前的Text值存储在TextChanged的某个字段中,将任何新的键盘输入存储在KeyPress的另一个字段中,然后在下一个TextChanged上比较当前的Text以查看它是否为前一个“文本”和键盘输入的结果与否。 – jmcilhinney

回答

0

暂时,我可以写一个代码来执行任务。现在,这段代码可以检测新输入的文本是否不是集合中任何项目的一部分。但是如果用户输入了可以被认为是集合中条目的一部分的新文本呢?即如果收藏包含如下条目: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