Чуть ранее мы рассмотрели пример диалогового окна, в котором созданы аналоги стандартных кнопок Copy, Cut и Paste. Конечно же, во многих ситуациях полезно уметь создавать аналоги и других кнопок, к которым привыкли пользователи. Сейчас мы рассмотрим пример диалогового окна, в котором появятся кнопки Undo и Redo, позволяющие отменять или восстанавливать те или иные действия. Как мы уже говорили, не все действия пользователя при его работе в диалоговом окне могут быть отменены. Тем не менее, наличие таких кнопок упрощает его работу.
Рассмотрим в качестве примера диалоговое окно UndoAndRedo, где помещены поле ввода NewText, список ListBox1 и три командные кнопки CommandButton1, CommandButton2, CommandButton3. Обработчики события Click командных кнопок задают операции Undo, Add (Добавить элемент) и Redo. Текст, введенный в поле NewText, будет добавляться в качестве нового элемента в список ListBox1 при выборе кнопки Add, а выбор Undo и Redo должен приводить к отмене последнего действия или к восстановлению его результата. Если же отмена или восстановление не представляется возможной, то подается звуковой сигнал. Вот как выглядит диалоговое окно в процессе работы:
Приведем теперь обработчики событий в совокупности, решающие поставленную задачу:
Пример 13.3.
(html, txt)
Если в этом диалоговом окне ввести текст в поле ввода и выбрать кнопку Add, в списке появится элемент с текстом из поля ввода. При попытке отменить это действие раздастся звуковой сигнал. Зато если щелкнуть кнопку "Отменить" сразу после ввода текста, он исчезнет, но будет восстановлен после нажатия кнопки "Восстановить". Если производится подряд несколько действий, каждое из которых можно отменить и восстановить, система их запоминает и позволяет проводить несколько операций отмены и/или восстановления подряд. В нашем диалоговом окне можно отметить элемент в списке, затем ввести новый текст в поле ввода, а затем отметить другой элемент в списке. Выбор кнопок "Отменить" и "Восстановить" позволяет проследить, как отменяются и восстанавливаются эти действия.