禁用MS Access中的多行字段

时间:2008-08-20 22:02:39

标签: ms-access

有没有办法禁用在文本框中输入多行条目(即,我想阻止我的用户进行ctrl-enter以获取换行符)?

7 个答案:

答案 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)+“ ”或为空