Как вы “просматриваете” действия пользователя, такие как изменение размера или редактирование в GoDiagrams?
Вопрос
- Объектная модель GoDiagram имеет GoDocument.
- В GoViews есть ссылка на GoDocument.
- Если пользователь вносит какие-либо изменения в поверхность построения диаграммы, генерируется GoDocument.Измененное событие с соответствующей информацией в аргументах события.
Я хотел бы получать уведомления о выполнении некоторых действий пользователя, чтобы я мог связаться со своим контроллером (при необходимости запретить / отменить его), а затем выдавать оттуда заказы на просмотр-обновление, которые фактически изменяют Годиаграмма Нортвудса компонент третьей стороны.
Измененное событие - это уведомление о том, что что-то только что произошло (прошедшее время) - Выполнение всего вышеперечисленного в обработчике событий приводит к a ....(ждите этого)...Исключение StackOverflowException.(GoDocument.Измененный обработчик > Обновляет GoDocument > Запускает новые измененные события..)
Итак, вопрос, как мне получить модель уведомлений типа BeforeEditing или BeforeResizing в GoDiagrams?Выжил ли кто-нибудь из тех, кто был там, чтобы рассказать историю?
Решение
ДФЙИ...Рекомендация поставщика компонентов состоит в том, чтобы создать подкласс и переопределить соответствующие методы для этого.Переопределите метод bool CanXXX(), вызовите настраиваемое событие с возможностью отмены.Если подписчик вернет false, отключитесь (возвращает false, чтобы прервать действие пользователя) из CanXXX.В GoDiagrams нет встроенного механизма для этого.
Например, вы могли бы определить событие CustomView.ObjectResizing, которое можно отменить .В вашем переопределении GoToolResizing.CanStart вы можете вызвать это событие.Если свойство CancelEventArgs.Cancel станет true, вам придется CanStart() вернуть false.
Источник http://www.nwoods.com/forum/forum_posts.asp?TID=2745
Другие советы
Аргументы события (GoChangedEventArgs) для события изменения имеют свойство IsBeforeChanging, которое указывает, было ли событие изменения вызвано методом "RaiseChanging" (true) или RaiseChanged (false).Это должно сказать вам, произошло ли уже изменение, но я не знаю способа отменить его.
Лучшее, что я могу предложить, - это вместо того, чтобы проверять, разрешено ли изменение, и выполнять его, проверьте, разрешено ли изменение нет разрешено, и если это не так, вызовите метод "Отменить" для аргументов в событии изменения.Так что, по сути:
OnChanged(GoChangedEventArgs e)
{
if(NotAllowed)
{
e.Undo();
}
}