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

Visio 判斷圖紙是否有形狀的兩種方法與效能比較

     編輯:關於C#

在 Visio 開發中,執行某些操作前需確認頁面是否有形狀,避免拋出「要求被禁止」例外。本文對比兩種檢查方式並分析適用場景。

方法一:Window.SelectAll() 計數

public static bool HasShapeInWindow(Window window) {
    try {
        window.SelectAll();
        bool result = window.Selection.Count > 0;
        window.DeselectAll();
        return result;
    } catch { return false; }
}

優點:API 直觀。缺點:會改變選取狀態,觸發 SelectionChanged 事件,若事件處理邏輯複雜可能造成副作用或效能損耗。

方法二:Page.Shapes.Count 直接判斷

Visio.Page page = VisioUtility.GetPage(visDocument, "饋線圖");
if (page.Shapes.Count <= 0) {
    MessageUtil.ShowTips("圖紙上沒有設備");
    return;
}

// 取得指定類型頁面
public static Page GetPage(Document doc, string pageType) {
    for (int i = 1; i <= doc.Pages.Count; i++) {
        Page p = doc.Pages[i];
        if (FormulaStringToString(p.PageSheet.get_Cells("Prop.繪圖頁").Formula) == pageType)
            return p;
    }
    return null;
}

優點:不改變選取狀態、不觸發事件、速度通常較快。缺點:需先定位目標頁面。

實戰建議

  • 在 Document 事件處理器中(如 SelectionChanged)避免使用方法一,防止遞迴觸發。
  • 一般情境優先使用 Page.Shapes.Count。
  • 若需檢查特定視窗可見範圍內的形狀,才考慮 Window.Selection。

選對方法,能讓 Visio 增益集更穩定高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved