2017-12-05 19 views
0

C#を使用してコンテナの内容(子)に到達しようとしています。 ページに描画されていてもマスターに変換された場合はうまく動作しますが、「コンテナ」として認識されなくなりました。C#Visioコンテナ

たとえば、 [挿入]タブから新しいコンテナを作成します。 「ホーム」タブから、コンテナ内に2つの矩形を描画し、それぞれにテキストを入力してから「基になるコンテナに追加」します。

この後、次のコードは2つの長方形名&テキストを報告します。

ただし、マスターを作成するために、コンテナをステンシルにドラッグします。 次に、マスターをページにドラッグしてインスタンスを作成します。

コードでは、MemberShapesがまったく見つかりません。

私は間違っていますか? アドバイス/ガイダンスをいただきました!

foreach (Microsoft.Office.Interop.Visio.Shape shape in Globals.ThisAddIn.Application.ActivePage.Shapes) 
       { 

        System.Diagnostics.Debug.WriteLine(shape.Name); 

        if (shape.ContainerProperties != null) { 
         foreach (int memberID in shape.ContainerProperties.GetMemberShapes(0)) { 
          Microsoft.Office.Interop.Visio.Shape vsoShape = Globals.ThisAddIn.Application.ActivePage.Shapes.ItemFromID[memberID]; 
          Debug.Print(vsoShape.Name); 
          Debug.Print(vsoShape.Text); 
         } 
        } 
} 

答えて

1

これは私が疑うトラブルを与えるマスター作成です。新しいコンテナをドキュメントステンシルにドラッグしてマスターを作成すると、メンバシェイプが乗ってくるようになります。しかし、Visioはマスターをグループ化するのが好きで、そうでなければグループ化します。新しいインスタンスシェイプ(コンテナとメンバ)をグループ化してから再度コードを実行すると、期待どおりにレポートされます。この問題は、マスターとのリンクが切断されることです。

シェイプを別のメンバとコンテナのマスターに分割する必要があると思います。

List型のコンテナシェイプを削除する場合は、User.msvSDListItemMaster + EventDropコンボを使用して追加のアイテムアイテムシェイプを削除するようVisioに指示できます。詳細については、Custom Containers, Lists and Callouts in Visio 2010ポストの「リストに挿入するシェイプの指定」を参照してください。残念ながら、新しいメンバシェイプのドロップ位置がわからないため、ストレートコンテナシェイプでは機能しません。

既定のコンテナを使用する場合は、コード内のドロップイベントをリッスンし、新しいメンバーをハンドラに追加するか、EventDropセルからQUEUEMARKEREVENTシェイプシート関数を使用してMarkerEventを発生させます。これは、アプリケーションマーカーイベントをリッスンして処理する必要があることを意味します。

私はあなたがVisioのイベントであるか馴染みのかわからないが、私はここで見つけるビデオのコード部分でそれらをカバー:

http://visualsignals.typepad.co.uk/vislog/2016/04/new-visio-training-videos.html

アップデート2017年12月13日 - 関連付けられたコースファイルポストを追加しますどのデモコードももちろん使用されています:

http://visualsignals.typepad.co.uk/vislog/2017/01/course-files-for-visio-flyby-for-developers-on-ch9.html