按键时清除文本框

Posted

技术标签:

【中文标题】按键时清除文本框【英文标题】:Clear Textbox on key press 【发布时间】:2012-06-22 15:42:54 【问题描述】:

有没有办法像在 excel 中一样清除按键上的文本框。

我尝试了以下代码,但单击文本框时会清除文本。我希望它在按下某个键时清除它。

Private Sub Text10_GotFocus()
Text10.Value = ""
End Sub

【问题讨论】:

how to clear text box inside a macro? 的可能重复项 功能应该和excel一样。在excel中输入一个数字,然后单击其他地方。当您再次单击同一文本框并按下某个键时,它会被删除。我想实现相同的功能。 【参考方案1】:

只要该控件获得焦点,您就可以选择该控件的整个文本内容。然后您的按键将替换选定的文本。

如果您希望每个表单上的每个文本框都发生这种情况,您可以将“行为输入字段”设置为“选择整个字段”。 (在 Access 2007 中,从 Office 按钮 -> Access 选项 -> 高级中找到该设置,然后在该对话框的“编辑”标题下查看。对于 Access 2003,请参阅this page。)

该设置不仅会应用于表单控件,还会应用于数据表视图中的表和查询。如果这不是您想要的,您可以在表单模块中使用 VBA 来为特定控件选择文本:

Private Sub MyTextBox_GotFocus()
    Me.MyTextBox.SelStart = 0
    Me.MyTextBox.SelLength = Len(Me.MyTextBox)
End Sub

如果您想为多个控件执行此操作,您可以创建一个通用过程:

Private Sub SelectWholeField()
    Me.ActiveControl.SelStart = 0
    Me.ActiveControl.SelLength = Len(Me.ActiveControl)
End Sub

然后从单个控件的获取焦点事件中调用该过程,如下所示:

Private Sub MyTextBox_GotFocus()
    SelectWholeField
End Sub

【讨论】:

【参考方案2】:
Private Sub Field1_KeyPress(KeyAscii As Integer)
If KeyAscii = 65 Then Me.Field1 = ""
'Or: If Chr(KeyAscii) = "A" Then Me.Field1 = ""
End Sub

将数字更改为您要用于清除字段的任何键的 ascii 值

【讨论】:

我试过上面的方法,每次按一个键它都会被删除。 msdn.microsoft.com/en-us/library/aa165567%28v=office.10%29.aspx 有关于该事件的信息。 KeyAscii 应该是按下的键的值 - 尝试使用 msgbox KeyAcii 来查看传递给例程的内容【参考方案3】:

声明一个表单级变量

Private CanDelete as Boolean

当 TextBox 获得焦点时,将 CanDelete 设置为 True

Private Sub txtTest_GotFocus()
  CanDelete = True
End Sub

在 KeyPress 事件中,如果 CanDelete 为 True,则清除文本

Private Sub txtTest_KeyPress(KeyAscii As Integer)
  If CanDelete Then
    Me.txtTest = ""
    CanDelete = False
  End If
End Sub

【讨论】:

以上是关于按键时清除文本框的主要内容,如果未能解决你的问题,请参考以下文章

C# 自动清除 Winform 文本框

当我们使用 JavaScript 隐藏/显示时清除下拉列表和/或文本框内容当它们被交替选择时

selenium怎样清除文本框中输入的内容

向上和向下键未触发 datagridview 单元格中的按键事件文本框

js如何实现点击第一次时清空原有文本框内容,输入文字后再点击不清空其中内容

如何清除此访问报告中文本框上的空白?