Чуть ранее мы рассмотрели пример диалогового окна, в котором созданы аналоги стандартных кнопок Copy, Cut и Paste. Конечно же, во многих ситуациях полезно уметь создавать аналоги и других кнопок, к которым привыкли пользователи. Сейчас мы рассмотрим пример диалогового окна, в котором появятся кнопки Undo и Redo, позволяющие отменять или восстанавливать те или иные действия. Как мы уже говорили, не все действия пользователя при его работе в диалоговом окне могут быть отменены. Тем не менее, наличие таких кнопок упрощает его работу.
Рассмотрим в качестве примера диалоговое окно UndoAndRedo, где помещены поле ввода NewText, список ListBox1 и три командные кнопки CommandButton1, CommandButton2, CommandButton3. Обработчики события Click командных кнопок задают операции Undo, Add (Добавить элемент) и Redo. Текст, введенный в поле NewText, будет добавляться в качестве нового элемента в список ListBox1 при выборе кнопки Add, а выбор Undo и Redo должен приводить к отмене последнего действия или к восстановлению его результата. Если же отмена или восстановление не представляется возможной, то подается звуковой сигнал. Вот как выглядит диалоговое окно в процессе работы:
Приведем теперь обработчики событий в совокупности, решающие поставленную задачу:
Private Sub CommandButton1_Click () If UndoAndRedo. CanUndo = True Then ' отмена возможна UndoAndRedo. UndoAction Else ' отмена невозможна Beep End If
End Sub
Private Sub CommandButton2_Click () If NewText. Text <> "" Then ' вставка новой рубрики ListBox1. AddItem (NewText. Text) Else ' текст не введен Beep End If End Sub
Private Sub CommandButton3_Click () If UndoAndRedo. CanRedo = True Then ' восстановление возможно UndoAndRedo. RedoAction Else ' восстановление невозможно Beep End If End Sub
Private Sub UserForm_Initialize () ListBox1. AddItem "черный" ListBox1. AddItem "белый"
End Sub
Пример 13.3.
Если в этом диалоговом окне ввести текст в поле ввода и выбрать кнопку Add, в списке появится элемент с текстом из поля ввода. При попытке отменить это действие раздастся звуковой сигнал. Зато если щелкнуть кнопку "Отменить" сразу после ввода текста, он исчезнет, но будет восстановлен после нажатия кнопки "Восстановить". Если производится подряд несколько действий, каждое из которых можно отменить и восстановить, система их запоминает и позволяет проводить несколько операций отмены и/или восстановления подряд. В нашем диалоговом окне можно отметить элемент в списке, затем ввести новый текст в поле ввода, а затем отметить другой элемент в списке. Выбор кнопок "Отменить" и "Восстановить" позволяет проследить, как отменяются и восстанавливаются эти действия.