如何在GoDiagrams中“预览”用户操作,例如调整大小或编辑?

时间:2008-09-21 19:01:21

标签: winforms controls

  • GoDiagram对象模型有一个GoDocument。
  • GoViews引用了GoDocument。
  • 如果用户对图表表面进行了任何修改,则会引发一个GoDocument.Changed事件,其中包含事件参数中的相关信息。

我希望在发生某些用户操作时收到通知,以便我可以与我的Controller进行协商(如果需要,禁止/取消它),然后从那里发出实际修改 Northwoods的视图更新订单GoDiagram 第三方组件。
Changed事件是一个刚刚发生事件的通知(过去时) - 在事件处理程序中执行上述所有操作会导致....(等待它)... StackOverflowException。 (GoDocument.Changed handler> Updates GoDocument> Firing new Changed events ..)

那么问题,如何在GoDiagrams中获得BeforeEditing或BeforeResizing类型的通知模型?有谁曾经去过那里讲故事吗?

2 个答案:

答案 0 :(得分:2)

... JFYI 组件供应商的建议是为此子类化并覆盖适当的方法。覆盖bool CanXXX()方法,引发可取消的自定义事件。如果订户返回false,则保存CanXXX(返回false以中止用户操作)。 在GoDiagrams中没有内置机制。

  

例如,您可以定义一个   CustomView.ObjectResizing可取消   事件。在你的覆盖   GoToolResizing.CanStart,你可以提高   那件事。如果   CancelEventArgs.Cancel属性   变得如此,你会有   CanStart()返回false。

来源http://www.nwoods.com/forum/forum_posts.asp?TID=2745

答案 1 :(得分:0)

change事件的事件参数(GoChangedEventArgs)有一个属性IsBeforeChanging,它指示是否从“RaiseChanging”方法(true)或RaiseChanged(false)引发了更改事件。这应该告诉你是否发生了变化,但我知道无法取消它。

我能建议的最好的不是检查是否允许更改并执行更改,检查更改是否允许,以及是否未调用“撤消”方法变更事件中的参数。基本上是这样的:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}