禁用MS Access中的多行字段

时间:2020-03-05 18:41:19  来源:igfitidea点击:

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

解决方案

回答

虽然不能完全确定这一点,但是我们应该可以在渲染内容时删除换行符,甚至可以运行vbscript清除该换行符,只需要检查chr(13)或者vbCrLf。

回答

我以前(和我上次在Access中工作的时间大约是在97年,所以我的记忆并不那么热)这样做的方式是引发按键事件并执行VBA功能。这与我们在现代Webform应用程序中使用AJAX建议文本框的方法类似,但是我记得,如果Access表单中有其他事件经常发生,例如onMouseMove遍历整个表单对象,它可能会崩溃。

回答

我能够使用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

回答

如果我们不想干扰事件,则可以将文本框的"验证规则"属性设置为

NOT LIKE "*"+Chr(10)+"*" OR "*"+Chr(13)+"*"

我们可能还需要设置"验证文本"以专门解释为什么Access抛出错误框。

回答

使用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方法对于用户而言更清洁,更容易。