2010-05-07 64 views
0

請允許我解釋我有什麼和我想要達到的目標。如何將文本框的textchanged事件限制爲鍵盤輸入?

我有一個文本框(稱爲txtb1)和它下面的一個按鈕(稱爲btn_browse)在vb.net項目中的winform。

當用戶單擊按鈕時,會出現文件夾瀏覽器對話框。用戶選擇他想要的文件夾,當他/她點擊「確定」時,對話框關閉,文本框中出現所選文件夾的路徑。我也希望將該值存儲在其他地方使用的變量中(當用戶單擊表單上的'apply'時,該值將被複制到xml文件中,但這不起作用,也不會與我的問題相關)。

爲了實現這個目標,我有以下代碼:

Public myVar As String 
Private Sub btn_browse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_browse.Click 

    Dim f As New FolderBrowserDialog 
    If f.ShowDialog() = DialogResult.OK Then 
     txtb1.Text = f.SelectedPath 
    End If 
    myVar = txtb1.text 
    f.Dispose() 

End Sub 

這部分工作,沒有任何問題。

現在,如果用戶: 1-決定手動輸入路徑而不是使用瀏覽按鈕。或者, 2-使用瀏覽按鈕並選擇他們決定手動改變位置

在試圖解決這個我添加了一個TextChanged事件到文本框如下的文件夾後:

Private Sub txtb1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtb1.TextChanged 
    myVar = txtb1.Text 

End Sub 

然而,這是行不通的。顯然,我不知道這是否相關,當用戶使用瀏覽按鈕選擇所需的文件夾時,textchanged事件也會被觸發。當我點擊文本框(給它焦點)並按下任何鍵盤鍵時,應用程序就會停止響應。

所以我的問題是:我正在以正確的方式進行?如果我的邏輯有缺陷,有人能指出我通常可以實現這樣的事情嗎?是否可以將觸發事件限制爲僅用於鍵盤輸入?我嘗試了keydown和按鍵事件,但我正在凍結。

+0

感謝大家的響應。正如ANC_Michael和Raja所建議的那樣,我將textbox屬性設置爲只讀。感謝Raja的明確答案,並感謝ANC_Michael提供的背景色和前景色建議。 – mazrabul 2010-05-07 19:55:54

回答

1

將TextBox.ReadOnly屬性設置爲true,然後將背景顏色設置爲白色,並將forecolor設置爲黑色以使其看起來像普通文本框,但無法對其進行編輯。

然後你不需要擔心如何處理文本框中的任何事件。

+0

我按照你的建議完成了。非常感謝您的回答。我會把你的答案作爲接受的答案。非常感謝您的幫助。 – mazrabul 2010-05-07 19:56:37

0

爲什麼你需要將這個值存儲在一個額外的變量?只要文本框對用戶可見,它就包含確切的值,並且可以直接訪問。因此,在這種情況下,您可以單擊「應用」按鈕從文本框中讀取值而不是變量,從而完全避免了這個問題。

1

我認爲你的解決方案非常簡單。只要將文本框視爲Web表單中的文件上傳控件即可。使其只讀。不要讓用戶編輯文本。這解決了兩個問題:

  1. 用戶將總是選擇使用已知的機制,一個文件夾(按鈕和選課文件夾點擊)
  2. 無需使用任何變量,因爲你總是可以從文本框中獲取位置。

HTH

+0

謝謝你一個非常明確的答案。我按照你的建議完成了。不幸的是,ANC_Michael只在一分鐘前提出了同樣的事情,所以我會以他的答案作爲接受的答案。抱歉。 – mazrabul 2010-05-07 19:55:19

+0

這根本不是問題。我們在這個社區關心的是互相幫助。只要你的問題解決了,我很高興:-) – Raja 2010-05-07 20:16:22