Отменить-Повторить повторные команды - PullRequest
0 голосов
/ 25 января 2011

Итак, я понимаю, что отмена / повтор обычно выполняется по шаблону команды. Однако, когда команда намерена повторить x раз, отмена x раз будет проблематичной для пользователей.

Например, у меня есть «int num», когда я нажимаю «+» на клавиатуре, программа делает «++ num». Если пользователь увеличит число с 0 до 50 нажатием «+», то пользователь захочет отменить, как мне разрешить пользователю отменить один раз, и число вернется к 0.

Как реализовать отмену, чтобы он мог обрабатывать серию повторяющихся команд?

Заранее спасибо!

1 Ответ

0 голосов
/ 01 июля 2011

Monitored Undo Framework (http://muf.codeplex.com) делает это, используя концепцию Пакета операций.Вы можете пометить набор операций как принадлежащих группе, чтобы система отмены отменяла / возвращала их как единицу работы.

Кроме того, библиотека позволяет оптимизировать ситуацию, сохраняя только первые / последние значения для данного поля.Таким образом, логика отмены / возврата не должна применять все 50 операций.Он может просто отменить, установив значение обратно к тому, что было до пакета отмены.

Предупреждение: Библиотека MUF не использует традиционный шаблон команды.Он использует больше шаблона памяти, отслеживая изменения после того, как они происходят в базовой модели домена.

Если вам нужно иметь истинный шаблон команды, то вы сможете добавить логику в реализацию отмены, которая будет проверятьзаписи в стеке отмены.Затем, например, если пользователь нажмет отмену в операции «+», стек начнет отмену и продолжит отмену, пока он продолжит находить операции «+» в стеке.Я использовал этот подход в тех случаях, когда я не мог пакетировать события, но хотел, чтобы стек отмены автоматически отменял более одной операции за раз.

...