GoDiagrams でのサイズ変更や編集などのユーザー アクションをどのように「プレビュー」しますか?

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

  •  02-07-2019
  •  | 
  •  

質問

  • GoDiagram オブジェクト モデルには GoDocument があります。
  • GoView には GoDocument への参照があります。
  • ユーザーが作図画面で何らかの変更を行うと、イベント引数に関連情報を指定して GoDocument.Changed イベントが発生します。

何らかのユーザーアクションが発生したときに通知を受け取り、コントローラーと協議して(必要に応じて許可/キャンセルできます)、そこから実際に変更するビュー更新命令を発行できるようにしたいと考えています。 ノースウッズ ゴーダイアグラム サードパーティのコンポーネント。
Changed イベントは、何かが起こったという通知です (過去形) - イベント ハンドラーで上記のすべてを実行すると、結果は ... になります。(それを待つ)...スタックオーバーフロー例外。(GoDocument.Changed ハンドラー > GoDocument の更新 > 新しい Changed イベントの発生..)

それで質問ですが、GoDiagrams で BeforeEditing または BeforeResizing のような通知モデルを取得するにはどうすればよいですか?そこに行ったことがある人で、生きて物語を語った人はいますか?

役に立ちましたか?

解決

参考までに...コンポーネント ベンダーの推奨事項は、これに適したメソッドをサブクラス化し、オーバーライドすることです。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) には、変更イベントが "RaiseChanging" メソッドから発生したのか (true)、RaiseChanged (false) から発生したかを示すプロパティ IsBeforeChanging があります。これにより、変更がまだ行われたかどうかがわかるはずですが、変更をキャンセルする方法がわかりません。

私が提案できる最善の方法は、変更が許可されているかどうかを確認して実行するのではなく、変更が許可されているかどうかを確認することです。 ない 許可されない場合は、変更イベントの引数に対して「Undo」メソッドを呼び出します。つまり本質的には:

OnChanged(GoChangedEventArgs e)
{
  if(NotAllowed)
  {
    e.Undo();
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top