2012-09-19 118 views
1

我在我的C#應用​​程序中使用Microsoft Visio作爲COM對象。我想在Visio頁面上自動排列形狀。我應該爲這項任務編碼?形狀是數據庫實體。通過C自動排列Visio形狀

userView.Shapes.SomeMethod(); 

userView是COM對象的名稱,但是SomeMethod應該是什麼?

回答

0

This可能有助於

相關報價

奠定了一個網頁,船長或組的形狀的子集, 建立在其中鋪設的形狀出來的一個選擇對象選中 ,然後調用Layout方法。如果在選擇對象上執行佈局方法 ,並且該對象沒有選擇任何形狀,則頁面,主體或選擇組中的所有形狀均排列在 之外。

編輯:noonand有關LayoutIncremental方法

剛把再看看對象模型,它似乎你想要的方法是LayoutIncremental方法

摘自2012年9月21日新增信息從relevant help topic說:

Page.LayoutIncremental(AlignOrSpace, AlignHorizontal, AlignVertical, SpaceHorizontal, SpaceVertical, UnitsNameOrCode) 
+0

這不起作用 –

0

我需要做類似前一陣子東西..

我用佈局的微軟Glee庫。下載中包含非常好的示例,向您展示如何添加節點和關係並使其「自動排列」。但請注意,Glee不適用於商業用途。

然後我用於轉換從吉利所計算的位置來Visio繪圖這個例子。

基本上我要做的就是添加我的所有節點和關係太歡樂合唱團,然後讓節點和它們的位置的列表,並使用第二個鏈接將他們添加到Visio。

這裏是一個什麼吉利可以做一個圖形例如:

Glee image example

2

我知道這是一個「較老」的問題,但 我的工作非常類似的東西,並已成功地「自動佈局'流程圖:

public enum GraphStyles { TopDown, LeftRight }; 
public void ArrangeGraph(GraphStyles Style) 
{ 
    if (Style == GraphStyles.TopDown) 
    { 
     // set 'PlaceStyle' 
     var placeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
      (short)VisSectionIndices.visSectionObject, 
      (short)VisRowIndices.visRowPageLayout, 
      (short)VisCellIndices.visPLOPlaceStyle).ResultIU = 1; 
     // set 'RouteStyle' 
     var routeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
      (short)VisSectionIndices.visSectionObject, 
      (short)VisRowIndices.visRowPageLayout, 
      (short)VisCellIndices.visPLORouteStyle).ResultIU = 5; 
     // set 'PageShapeSplit' 
     var pageShapeSplitCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
      (short)VisSectionIndices.visSectionObject, 
      (short)VisRowIndices.visRowPageLayout, 
      (short)VisCellIndices.visPLOSplit).ResultIU = 1; 
    } 
    else if (Style == GraphStyles.LeftRight) 
    { 
     // set 'PlaceStyle' 
     var placeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
      (short)VisSectionIndices.visSectionObject, 
      (short)VisRowIndices.visRowPageLayout, 
      (short)VisCellIndices.visPLOPlaceStyle).ResultIU = 2; 
     // set 'RouteStyle' 
     var routeStyleCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
      (short)VisSectionIndices.visSectionObject, 
      (short)VisRowIndices.visRowPageLayout, 
      (short)VisCellIndices.visPLORouteStyle).ResultIU = 6; 
     // set 'PageShapeSplit' 
     var pageShapeSplitCell = VisApp.ActivePage.PageSheet.get_CellsSRC(
      (short)VisSectionIndices.visSectionObject, 
      (short)VisRowIndices.visRowPageLayout, 
      (short)VisCellIndices.visPLOSplit).ResultIU = 1; 
    } 
    else { throw new NotImplementedException("GraphStyle " + Style.ToString() + " is not supported"); } 
    VisApp.ActivePage.Layout(); 
} 

希望這可以節省一些人一些時間。 我花了一段時間才弄明白。

我使用的是Visio 2010和visual studio 2010