在 Visio 開發中,執行某些操作前需確認頁面是否有形狀,避免拋出「要求被禁止」例外。本文對比兩種檢查方式並分析適用場景。
public static bool HasShapeInWindow(Window window) {
try {
window.SelectAll();
bool result = window.Selection.Count > 0;
window.DeselectAll();
return result;
} catch { return false; }
}
優點:API 直觀。缺點:會改變選取狀態,觸發 SelectionChanged 事件,若事件處理邏輯複雜可能造成副作用或效能損耗。
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 增益集更穩定高效。