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

C# Visio 二次開發:判斷圖面是否有形狀的兩種方法

     編輯:關於C語言

方法一:Window.SelectAll 選取計數


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

方法二:Page.Shapes.Count 直接計數


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

[CLSCompliant(false)]
public static Page GetPage(Document visDocument, string pageType)
{
    Page visPage;
    for (int i = 1; i <= visDocument.Pages.Count; i++)
    {
        visPage = visDocument.Pages[i];
        if (FormulaStringToString(visPage.PageSheet.get_Cells(CUST_PROP_PREFIX + "繪圖頁").Formula) == pageType)
            return visPage;
    }
    return null;
}

比較與適用場景

維度SelectAll 法Shapes.Count 法
速度較慢 (選取操作)較快 (直接屬性)
事件干擾觸發 SelectionChanged無副作用
適用場景需同步選取狀態時純判斷、事件處理中

關鍵避坑指南

若訂閱 SelectionChanged 事件 (如 ctrlDrawing_SelectionChanged),禁止使用方法一,否則會觸發遞迴事件導致邏輯錯誤或效能問題。此時必須使用方法二。

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