Включить «Повторить» для полей расширенного текста MS Access - PullRequest
0 голосов
/ 22 ноября 2018

Минимальное воспроизведение: (Access 2016)

  1. Создание новой пустой базы данных.
  2. Создание новой пустой формы с одним крупным текстомbox.
  3. Установите для его свойства «Формат текста» значение «Rich Text».
  4. Сохраните и откройте форму в «Представлении формы».
  5. Введите много текста.
  6. Нажмите Ctrl-Z, чтобы отменить, потому что вы сделали опечатку в последнем слове.
  7. Упс, весь ваш текст пропал.

Ожидаемое поведение : нажмите Ctrl-Y или кнопку «Вернуть» на панели инструментов, чтобы «отменить операцию отмены» и вернуть текст.

Фактическое поведение : Ctrl-Y ничего не делает, а кнопка «Повторить» на панели инструментов отображается серым цветом.

Примечание : это происходит только в том случае, если формат текста «Rich Text».С текстовыми полями «Простой текст» Ctrl-Y по-прежнему ничего не делает, но по крайней мере кнопка «Повторить» доступна (если вы не нажмете Ctrl-Z дважды, но это раздражает для другого вопроса).

Вопрос: Возможно ли активировать «Повторить» для текстовых полей Rich Text?

Справочная информация : Мы являемся разработчиками программного продукта на основе MS-Access (поэтому я задал свой вопрос здесь вместо SuperUser), и наши клиенты (справедливо) привыкли к тому, что Ctrl-Z является обратимой операцией.Если в Access нет встроенной поддержки этой функции, приветствуются также идеи обходных путей на основе VBA.

1 Ответ

0 голосов
/ 22 ноября 2018

Не думаю, что возможно активировать Повторить .Тем не менее, вы можете реализовать его самостоятельно, используя немного VBA (при прослушивании комбинации клавиш Ctrl + Z, если это произойдет, сохраните текст, если произойдет Ctrl + Y, а затем верните текст в последний Ctrl + Z) * ​​1003*

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

Конечно, вы можете переместить эту логику в отдельный класс, а затем применить ее ко всем элементам управления расширенного текста в форме при загрузке формы (или ко всем, у которых есть определенный тег).Это облегчит управление этим проектом.

...