【发布时间】:2010-05-07 18:32:06
【问题描述】:
请允许我解释一下我拥有什么以及我想要实现什么。
我在一个 vb.net 项目的 winform 上有一个文本框(称为 txtb1)和一个按钮(称为 btn_browse)。
当用户单击按钮时,会出现一个文件夹浏览器对话框。用户选择他/她想要的文件夹,当他/她单击“确定”时,对话框关闭,所选文件夹的路径出现在文本框中。我还想将该值存储在一个变量中以在其他地方使用(当用户单击表单上的“应用”时,该值将被复制到一个 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 和 keypress 事件,但我得到了冻结。
【问题讨论】:
-
感谢大家的回复。正如 ANC_Michael 和 Raja 所建议的,我已将文本框属性设置为只读。感谢 Raja 的明确回答,并感谢 ANC_Michael 对背景色和前景色的建议。
标签: vb.net text textbox keyboard