請允許我解釋我有什麼和我想要達到的目標。如何將文本框的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和按鍵事件,但我正在凍結。
感謝大家的響應。正如ANC_Michael和Raja所建議的那樣,我將textbox屬性設置爲只讀。感謝Raja的明確答案,並感謝ANC_Michael提供的背景色和前景色建議。 – mazrabul 2010-05-07 19:55:54