如何仅将文本框的textchanged事件限制为键盘输入?

时间:2010-05-07 18:32:07

标签: vb.net text textbox keyboard

请允许我解释一下我的想法以及我想要实现的目标。

我在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事件,但我正在冻结。

3 个答案:

答案 0 :(得分:1)

将TextBox.ReadOnly属性设置为true,然后将背景颜色设置为白色,将forecolor设置为黑色,使其看起来像普通文本框,但无法对其进行编辑。

然后你就不必担心像你一样处理文本框中的任何事件。

答案 1 :(得分:1)

我认为您的解决方案非常简单。只需将文本框视为Web表单中的文件上载控件即可。让它只读。不要让用户编辑文本。这解决了两个问题:

  1. 用户将始终使用已知机制(单击按钮和选择文件夹)选择文件夹
  2. 无需使用任何变量,因为您始终可以从文本框中获取位置。
  3. HTH

答案 2 :(得分:0)

为什么需要将此值存储在其他变量中?只要文本框对用户可见,它就包含确定的值,可以直接访问。因此,在这种情况下,您可以单击“应用”按钮从文本框中读取值而不是变量,从而完全避免了事件的这个问题。

相关问题