2017-04-19 25 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