Как вы «просматриваете» действия пользователя, такие как изменение размера или редактирование в GoDiagrams? - PullRequest
2 голосов
/ 21 сентября 2008
  • Объектная модель GoDiagram имеет GoDocument.
  • GoViews имеют ссылку на GoDocument.
  • Если пользователь вносит какие-либо изменения в поверхность диаграммы, возникает событие GoDocument.Changed с соответствующей информацией в аргументах события.

Я хотел бы получать уведомления о некоторых пользовательских действиях, чтобы я мог посоветоваться с моим контроллером (запретить / отменить его, если это необходимо), а затем издать оттуда приказы об обновлении вида, которые фактически изменяют Northwoods GoDiagram сторонний компонент.
Событие Changed - это уведомление о том, что что-то только что произошло (прошедшее время). Выполнение всего вышеперечисленного в обработчике события приводит к .... ( ожидание этого ) ... StackOverflowException. (Обработчик GoDocument.Changed> Обновления GoDocument> Запуск новых измененных событий ..)

Итак, вопрос, как мне получить модель уведомлений BeforeEditing или BeforeResizing в GoDiagrams? Кто-нибудь, кто был там, жил, чтобы рассказать историю?

Ответы [ 2 ]

2 голосов
/ 30 сентября 2008

JFYI ... Рекомендация компонента-поставщика заключается в создании подкласса и переопределении соответствующих методов для этого. Переопределите метод bool CanXXX (), вызовите отменяемое пользовательское событие. Если подписчик возвращает ложь, выведите ( верните ложь, чтобы прервать действие пользователя ) CanXXX. Нет встроенного механизма для этого в GoDiagrams.

Например, вы можете определить CustomView.ObjectResizing отменяется событие. В вашем переопределении GoToolResizing.CanStart, вы можете поднять это событие. Если Свойство CancelEventArgs.Cancel становится правдой, вы бы CanStart () возвращает false.

Источник http://www.nwoods.com/forum/forum_posts.asp?TID=2745

0 голосов
/ 25 сентября 2008

Аргументы события (GoChangedEventArgs) для события изменения имеют свойство IsBeforeChanging, которое указывает, было ли событие изменения вызвано методом «RaiseChanging» (true) или RaiseChanged (false). Это должно сказать вам, произошло ли изменение еще, но я не знаю способа отменить его.

Лучшее, что я могу предложить, - это вместо того, чтобы проверять, разрешено ли изменение, и выполнять его, проверять, разрешено ли изменение , не разрешено ли , и не вызывать ли метод "Отменить" для аргументов в событии изменения. Итак, по существу:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...