对MS Access RTF字段启用“重做”

时间:2018-11-22 13:57:39

标签: ms-access undo-redo

最小复制:(Access 2016)

  1. 创建一个新的空白数据库。
  2. 使用一个大的文本框创建一个新的空白表单。
  3. 将其“文本格式”属性设置为“富文本”。
  4. 保存并在“表单视图”中打开表单。
  5. 输入很多文本。
  6. 按Ctrl-Z撤消操作,因为您在最后一个单词中输入了错字。
  7. 糟糕,您所有的文字都消失了。

预期的行为:按Ctrl-Y或工具栏中的“重做”按钮以“撤消撤消操作”并找回文本。

实际行为:Ctrl-Y不会执行任何操作,并且工具栏中的“重做”按钮将显示为灰色。

注意:仅当文本格式为“ Rich Text”时才会发生。对于“纯文本”文本框,Ctrl-Y仍然不起作用,但是至少可以使用“重做”按钮(除非您两次按Ctrl-Z,但这是另一个问题的困扰)。

问题:是否可以为RTF文本框激活“重做”?

背景:我们是基于MS-Access的软件产品的开发人员(因此,我在这里问的是SuperUser,而不是SuperUser),我们的客户(正确地)习惯了Ctrl-Z可恢复的操作。如果Access中没有对此功能的内置支持,则也欢迎基于VBA的解决方法的想法。

1 个答案:

答案 0 :(得分:1)

我认为无法激活 Redo 。但是,您可以自己使用一些VBA来实现它(通过听Ctrl + Z组合键,如果出现,则存储文本,如果出现Ctrl + Y,然后将文本还原为最后一个Ctrl + Z)

Dim lastUndo As String
Private Sub MyRichTextbox_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKeyZ And Shift And acCtrlMask = acCtrlMask Then
        lastUndo = MyRichTextbox.Text
    ElseIf KeyCode = vbKeyY And Shift And acCtrlMask = acCtrlMask Then
        Dim t As String
        t = MyRichTextbox.Text 'Allow for toggling undo
        MyRichTextbox.Text = lastUndo
        lastUndo = t
    End If
End Sub

当然,您可以将此逻辑移到单独的类,然后将其应用于表单加载时表单上的所有富文本控件(或所有具有特定标签的表单)。这样可以更轻松地为项目管理此项目。

相关问题