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