请允许我解释一下我的想法以及我想要实现的目标。
我在vb.net项目的winform上有一个文本框(名为txtb1)和一个下面的按钮(称为btn_browse)。
当用户单击该按钮时,将出现文件夹浏览器对话框。用户选择他想要的文件夹,当他/她点击“确定”时,对话框关闭,所选文件夹的路径出现在文本框中。我还想将该值存储在一个变量中以便在其他地方使用(当用户在表单上单击“应用”时,该值将被复制到xml文件中,但这不会影响我的问题。) / p>
要实现这一点,我有以下代码:
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事件,但我正在冻结。
答案 0 :(得分:1)
将TextBox.ReadOnly属性设置为true,然后将背景颜色设置为白色,将forecolor设置为黑色,使其看起来像普通文本框,但无法对其进行编辑。
然后你就不必担心像你一样处理文本框中的任何事件。
答案 1 :(得分:1)
我认为您的解决方案非常简单。只需将文本框视为Web表单中的文件上载控件即可。让它只读。不要让用户编辑文本。这解决了两个问题:
HTH
答案 2 :(得分:0)
为什么需要将此值存储在其他变量中?只要文本框对用户可见,它就包含确定的值,可以直接访问。因此,在这种情况下,您可以单击“应用”按钮从文本框中读取值而不是变量,从而完全避免了事件的这个问题。