初心者よくあるご質問でWinFormsのためMindFusion.Diagrammingを強調表示します(A)

本稿では、ユーザーが頻繁にWinFormsのためMindFusion.Diagrammingに遭遇した問題を解析し、私は〜あなたの助けを期待します

Q:図形を移動した後に発生するすべてのイベントはありますか?私たちは、位置の形状に関連したコントロールの一部を保持し、それらが移動されたときに知っておく必要がありますか?

:モバイルノードまたはノードのサイズを調整する原因NodeModifiedイベント。イベントパラメータに起こった内容を正確に把握するAdjustmentHandle状況を確認してください。AdjustmentHandles.Move場合は、ノードが移動されたことを意味します。

Q:私はDiagramView制御の私のAllowDropフォームの例を設定しようとしていますドロップターゲットをFlowChart.NETコントロールに真を示しています。表示されるドロップターゲットとして応答しないコントロール(マウスカーソルのフィードバックに基づいて)。どのようにすればよいですか?

A:あなたはまた、DragOver DragOverはとのDragDropイベントに対処する必要があります。

diagramView_OnDragOver ...
{
//マウスのフィードバックのための
e.Effect = DragDropEffects.Copy。
}

... diagramView_OnDropは
{
//ザ・でデータをドラッグ取得し、適用します
あなたがダイアグラムにする必要がAS // ITを
}
Q:モバイルプロジェクト・チャート上のたびに、私はResizeToFitItemsにそれを強制することができますか?

:あなたは、むしろResizeToFitItemsと呼ばれるイベントハンドラへの対応よりも、Diagram.AutoResizeプロパティを有効にすることができます。

依頼する:あなたがいない単一のプロジェクトのための2つ以上のプロジェクトを、選択した場合のみSelectionMovedのイベントが有効になります。そこに別のイベントやプロパティは、単一のオブジェクトの選択として認識されますされていますか?

A:唯一の複数の選択のためにSelectionMoved。あなたが検出される単一の項目を変更した場合、プロセスは、NodeModifiedやLinkModifiedなど多くのイベント、でなければなりません。

Q:私は、検出テーブルの行をダブルクリックする必要がありますが、あなたの代わりに行のヘッダをクリックするとNodeDoubleClickedイベントのみがトリガされます。あなたがテーブルの任意の部分をクリックすると、どのように私は達成することができますか?

:プロセスは、それがにつながる、CellDoubleClickedテーブルセルをダブルクリックします。クリックされた行を決定するために、セルの行のプロパティを確認してください。

Q:どのようにドラッグして、フローチャートの制御にListViewコントロールまたはTreeViewコントロールからドロップすることができますか?

次のシナリオである:ユーザがツリービューコントロールのツリーノードを選択し、上部フローチャートコントロールをドラッグ。あなたはフローチャートのコントロールをドラッグすると、カーソルがテキストボックスのように見えますドラッグします。削除した後、フローチャートの制御は、テキストボックスが表示されますです。

:あなたが、そして達成するためにTreeView.MouseDownイベントハンドラからControl.DoDragDropを呼び出すことによってDiagramView.DragDropイベント内のノードを作成することができます。参照してください、そしてステップの「その他」1はFlowCharterサンプルプロジェクトのListView FCDemo例。

Q:どのように私は特定のノードでの編集テキストがAllowInplaceEditを有効に防ぐことができますか?

:ユーザーのノードをダブルクリックすると、Diagram.NodeTextEditingの検証イベントにつながります。e.Cancelは、いくつかのノードのテキストを編集して、真の防止に設定しました。

Q:私は、オブジェクトのDiagramView挙動プロパティがDrawLinksに設定されているが、私はノードからノードにドラッグすると、私は2つだけのノードを選択し、リンクが描かれていません。私は行動に影響を与える可能性があり、この設定を確認する必要がありますか?

:Diagram.AllowUnanchoredLinksとDiagramNode.AllowOutgoingLinksを確認してください。あなたは、元を無効にしている場合は、あなただけのAnchorPatternリンクされたノードの集合から引き出すことができます。

Q:私は、ノードの画像生成チャートを使用して、ユーザーが簡単にモバイルノードを開始するためにクリックしています。また、ユーザーは、我々は既存のプロジェクトの大きさを調整することはできません、新しいプロジェクトを作成することはできないはず。私は、カスタム動作オブジェクトを作成し、これを行うべきでしょうか?

:これは、いくつかのプロパティを設定することによって達成することができます。

DiagramView.Behaviorを変更します

ノードHandlesStyle設定MoveOnly

ModificationStartセットAutoHandles

あなたはまた、カスタム動作クラスとして実装することができる、あなたはまた、StartDrawメソッドから戻ることができます

新しいInteractionState(のCurrentItem、8、Action.Modify)を返します。

新しいInteractionState(fc.Selection、-1、Action.Create)を返します。

新しいInteractionState(fc.Selection、8、Action.Modify)を返します。

図8は、場合アクションの変更設定に使用され、調整ハンドルの操作の指標です。操作は、「作成」する場合、インデックスでは無視されます。あなたは、派生クラスの挙動インスタンスがDiagramView.CustomBehaviorプロパティに割り当てられていることができます。

Q:私は、動的に最も近い接続ノードを固定するためには、ノード上のリンクのアンカーを変更する最も簡単な方法を探しています。宛先ノードの場所が変更された場合、私は、ソースノード間でリンクしません。

:動的なプロパティを有効にするには、その動作モードの時にリンクをチェックしてください。これは、ノードをドラッグしながら、その起源と目的地の接続ポイントを変更リンクします。

(今すぐオンライン注文に入社WinFormsのためMindFusion.Diagramming、表示価格〜クリック)

Qを:ごとのテーブルまたは上の各セルにテキスト編集を制御する方法はありますか?我々はいくつかのフォームを持っているし、我々は他の場所の編集をしたくないと私たちはインプレース編集セルの値ではなく、タイトルを許可したいです...

:あなたはDiagram.NodeTextEditingとDiagram.CellTextEditingイベントを処理することによって達成することができます。trueに設定e.Cancelは、ノードのテキストを編集することができなくなります。

Q:どのようにスクロールしたり、グラフを拡大するには、マウスのホイールを使用するには?

:次のようにあなたは、スクロールのサポートが追加され、マウスのホイールを使用することができます。

ます。private void Form1_Load(オブジェクト送信者、
System.EventArgs e)の

{

diagramView.MouseWheel + =
新しいMouseEventHandler(diagramView_MouseWheel)。

}

無効diagramView_MouseWheel(オブジェクト送信者、
MouseEventArgs引数)

{

diagramView fcSender = diagramViewとして送信者。

フロートnewScrollY = fcSender.ScrollY - args.Delta / 50。

もし(newScrollY> fcSender.DocExtents.Top)

fcSender.ScrollY = newScrollY。

}
このイベントは、Controlクラスから継承されますが、何らかの理由で、それはイベントIDEのリストには表示されません。手動でそのハンドラを追加する必要があります。上記ハンドラ文書をスクロール、しかし、あなたが望むなら、あなたはDiagramView.ZoomFactorプロパティを変更することにより、ズームイン/アウトし、それを変更することができます。

Q:私は、チャートのすべての内容を選択して、DXとDYの一定量を選択するには、下に移動します。簡単に選択範囲全体を移動する方法はありませんか?

A:モバイルノードは、モバイルエンドポイントをリンクしますので、最も簡単な解決策は、2つのフェーズ内のすべての項目を移動することです。まず、選択されたすべてのノードを移動する-これが最後のリンクをオフセットします。その後、全てのコントロールポイントは、エンドポイント(モバイルノードとエンドポイント)に加えて、選択されたすべてのリンクをオフセット。

Q:私はControlNodeオブジェクトを使用しています、私は、テキストエディタを持っています。どのようにリサイズをペイントして移動するには?

:メッセージキューは、他のメッセージでない場合にのみ、Windowsは、マウスを移動する前に一時停止するマネージコントロールを再描画しません、コントロールにWM_PAINTメッセージを送信します。あなたは自分自身を再描画するNodeModifyingイベントハンドラからのRefreshメソッドを呼び出すことにより、マネージコントロールを強制することができます。

Q:私は、面積が4つのレーンに分かれているフローチャートでしょう。任意の左クリックイベントRowHeadersはありますか?

:あなたは、Clickedイベントを処理し、あなたには、いくつかのヘッダをクリックしたかどうかを調べるためにGetHeaderFromPointメソッドを呼び出すことができます。

Q:許可受け入れリンクの数や形状ノードを制限する方法はありますか?

:あなたはLinkCreatingとLinkModifying検証イベントに対処し、ノードに接続されたリンクの数に応じた動作を許可するか、防ぐことができます。

Q:そのシェイプノードの特定の種類のチャートに追加することができますを制限する方法はありますか?

:e.Cancel = trueのグラフ、プロセスNodeCreatingイベントのノードの特定の数以上と設定がある場合。

Q:チャートにサイクルを作成からユーザーを防ぐために、どのように?

:これは簡単な方法です。

プライベート無効diagram_LinkModifying(オブジェクト送信者、
MindFusion.Diagramming.LinkValidationEventArgs E)
{
(e.ChangingOrigin || e.ChangingDestination)であれば
、{
パスファインダーファインダー=
新しいパスファインダ(図、偽);
(finder.FindShortestPath(もし
!e.Destination、e.Origin)=ヌル)
e.Cancel =はtrue。
}
}

無効diagram_LinkCreatingプライベート(オブジェクト送信者、
MindFusion.Diagramming.LinkValidationEventArgs E)
{
パスファインダファインダー=
新しい新しいパスファインダ(falseにダイアグラム、);
IF(finder.FindShortestPath(
!e.Destination、e.Origin)=ヌル)
e.Cancel = trueに。
}
Q:私は2つのノードが重複し、把握。私は重複領域をクリックすると、私はいつも同じノードを選択します。私が選択したいノードの優先順位を設定する方法はありませんか?

A:のZIndexは、優先度の高いノードを有するように大きな値を割り当てます。あなたはノードをクリックした場合にのみ、マウスの位置のすべてのノードを見つけるために、GetNodesAtを呼び出し、プログラムでノードの1つを選択します。

Qは:( - >フォームを保有リンク)同一の一例Iは、モバイルノードがFlowChart.NETデモとして、ヘッドの基部にまたはモバイルノードを連結した境界ノードの周囲に接続されていることを望みます。私はプロパティがtrueに設定されているRetainFormます。しかし、これは......私は正しいプロパティを設定しなければならないものである十分ではありませんか?

:DiagramLink.Dynamicをtrueに設定してください、これはモバイルノード属性の終了位置での更新リンクです。リンクの初期の形状を保持するようにRetainFormはまた、中央制御点の位置を更新することができる可能にします。自動ルートが有効になっている場合、それはRetainFormを無視することができます。

Q:どのように(代わりに、同じ行の)別のテーブルから複数のリンクを作成するには、ユーザーを有効にするには?

A:Diagram.AllowLinksRepeat設定は、この機能を有効にする場合はtrueに。

Q&Aを連続的に更新>>>

おすすめ

転載: blog.51cto.com/14499080/2429820