有没有办法禁用在文本框中输入多行条目(即,我想阻止我的用户进行ctrl-enter以获取换行符)?
答案 0 :(得分:5)
我能够在使用KeyPress事件时做到这一点。 这是代码示例:
Private Sub SingleLineTextBox_ KeyPress(ByRef KeyAscii As Integer)
If KeyAscii = 10 _
or KeyAscii = 13 Then
'10 -> Ctrl-Enter. AKA ^J or ctrl-j
'13 -> Enter. AKA ^M or ctrl-m
KeyAscii = 0 'clear the the KeyPress
End If
End Sub
答案 1 :(得分:3)
我以前做过的方式(以及我上次在Access工作的时间是'97左右所以我的记忆力不是很热)提出了一个关键事件并执行了VBA功能。这与你在现代webform应用程序中使用AJAX建议文本框所采用的方法类似,但我记得如果你的Access表单中有其他事件经常发生,例如onMouseMove整个表单对象,它可能会被绊倒。
答案 2 :(得分:2)
使用KeyPress事件意味着每次用户输入时您的代码都会触发。这可能导致屏幕闪烁和其他问题(OnChange事件将是相同的)。
在我看来,您应该使用单个事件去除CrLf,并且正确的事件将是AfterUpdate。你只需这样做:
If InStr(Me!MyMemoControl, vbCrLf) Then
Me!MyMemoControl = Replace(Me!MyMemoControl, vbCrLf, vbNullString)
End If
注意使用Access全局常量,vbCrLf(对于Chr(10)& Chr(13))和vbNullString(对于零长度字符串)。
使用验证规则意味着您将向用户弹出一条丑陋的错误消息,但为他们提供了解决问题的工具。对我来说,AfterUpdate方法对用户来说更清晰,更容易。
答案 3 :(得分:0)
不完全确定那个,你应该能够在渲染内容时删除换行符,或者甚至运行vbscript来清除它,你只需要检查chr(13)或vbCrLf。 / p>
答案 4 :(得分:0)
如果您不希望事件干扰,可以将文本框的验证规则属性设置为
NOT LIKE "*"+Chr(10)+"*" OR "*"+Chr(13)+"*"
您可能还需要设置验证文本以具体说明Access为什么会抛出错误框。
答案 5 :(得分:0)
感谢Ian和BIBD。我根据您可以重复使用的答案创建了一个公共子。
Public Sub PreventNewlines(ByRef KeyAscii As Integer)
If KeyAscii = 10 Or KeyAscii = 13 Then KeyAscii = 0
End Sub
Private Sub textbox_KeyPress(KeyAscii As Integer)
Call PreventNewlines(KeyAscii)
End Sub
屏幕闪烁永远不应成为问题,因为这些是处理事件,而不是持续轮询(并且每个控制都会进一步限制范围)。对我而言似乎是一个无效的参数,因为每个文本编辑器每次按键都会执行一些代码。
由于
答案 6 :(得分:0)
Jason的反应很好。只是添加到它。.
如果要允许用户将文本框保留为空白,则可以使用以下方法:
不像“ ” + Chr(10)+“ ”或“ ” + Chr(13)+“ ”或为空