【问题标题】:How can I limit a textchanged event for a textbox to keyboard input only?如何将文本框的 textchanged 事件限制为仅键盘输入?
【发布时间】: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


【解决方案1】:

将 TextBox.ReadOnly 属性设置为 true,然后将背景色设置为白色,将前色设置为黑色,以看起来像一个普通的文本框,但他们无法对其进行编辑。

那么您就不必像您一样担心处理文本框中的任何事件了。

【讨论】:

  • 我已经按照你的建议做了。非常感谢您的回答。我会将您的答案作为已接受的答案。非常感谢您的帮助。
【解决方案2】:

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

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

HTH

【讨论】:

  • 感谢您提供非常明确的答复。我已经按照你的建议做了。不幸的是,ANC_Michael 仅在一分钟前提出了同样的建议,所以我将他的回答作为接受的答案。对不起。
  • 这根本不是问题。我们在这个社区所关心的只是互相帮助。只要你的问题得到解决,我很高兴:-)
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多