首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Visio 二次開發系列(四):群組形狀選取模式切換與子形狀操作實戰

     編輯:關於C語言

群組選取模式屬性

透過 ShapeSheet 發現 GroupSelectMode 屬性控制群組選取行為:

  • 0:僅選取群組整體(預設)
  • 1:優先選取群組,再選取子形狀
  • 2:優先選取子形狀(組合元件)

封裝切換模式的工具方法

[CLSCompliant(false)]
public static void SetGroupSelectMode(Visio.Shape targetShape, int selectMode)
{
    targetShape.get_CellsSRC(
        (short)VisSectionIndices.visSectionObject,
        (short)VisRowIndices.visRowGroup,
        (short)VisCellIndices.visGroupSelectMode
    ).FormulaU = selectMode.ToString();
}

實戰應用:換向閥左右切換動畫

需求:油路分析時,換向閥(群組形狀)需實現子形狀「閥A」右移、「閥B」左移的動態效果。

else if (equipType == "4/2閥")
{
    VisioUtility.SetGroupSelectMode(shape, 2); // 切換至子形狀選取模式
    
    foreach (Shape subShape in shape.Shapes)
    {
        string subEquipType = VisioUtility.GetShapeCellValue(subShape, "設備類型");
        if (subEquipType == "閥A" || subEquipType == "閥B")
        {
            subShape.Text = subEquipType;
            if (intValue != 0) continue;
            
            try
            {
                VisWindow.DeselectAll();
                VisWindow.Select(subShape, (short)VisSelectArgs.visSubSelect);
                
                if (subEquipType == "閥A")
                    VisWindow.Selection.Move(0.393701, 0, "inches"); // 右移
                else if (subEquipType == "閥B")
                    VisWindow.Selection.Move(-0.393701, 0, "inches"); // 左移
                
                Application.DoEvents();
                Thread.Sleep(50); // 動畫延遲
            }
            catch (Exception ex)
            {
                VisWindow.DeselectAll();
            }
        }
    }
    VisioUtility.SetGroupSelectMode(shape, 0); // 還原群組模式
}

關鍵技術總結

  • 透過 visGroupSelectMode 動態切換選取層級
  • 利用自訂屬性「設備類型」定位子形狀,避免硬編碼 ID
  • Application.DoEvents() + Thread.Sleep() 實現 UI 即時刷新動畫
  • 操作完成後恢復模式,保持圖形正常交互行為
世界本簡單,只因道未知;無師可自通,碼界無秘密。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved