Как вы “просматриваете” действия пользователя, такие как изменение размера или редактирование в GoDiagrams?

StackOverflow https://stackoverflow.com/questions/111744

  •  02-07-2019
  •  | 
  •  

Вопрос

  • Объектная модель 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();
  }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top