成熟的 Visio 增益集需要專業的 UI 佈局與清晰的分層架構。本文分享實戰專案的介面設計細節(ToolStripPanel + DockPanel Suite)與四層架構(UI/BLL/DAL/Entity),並展示關鍵功能模組的程式碼片段。
MenuStrip + 多組 ToolStrip,置於 ToolStripPanel 實現停駐/拖曳排列。StatusStrip 顯示座標、縮放比、選取物件資訊。
// 另存為 VSD
SaveFileDialog dlg = new SaveFileDialog();
dlg.Filter = "Visio檔案(*.vsd)|*.vsd|所有檔案(*.*)|*.*";
dlg.FileName = Portal.gc.gVisioImage.VisioName;
if (dlg.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(dlg.FileName)) {
File.Copy(Portal.gc.gVisioTemplateFilePath, dlg.FileName, true);
}
// 匯出 DWG
dlg.Filter = "AutoCAD 繪圖 (*.dwg)|*.dwg|所有檔案(*.*)|*.*";
dlg.FileName = "";
if (dlg.ShowDialog() == DialogResult.OK && !string.IsNullOrEmpty(dlg.FileName)) {
VisApplication.ActivePage.Export(dlg.FileName);
}
// 透過 DoCmd 執行內建命令
VisApplication.DoCmd((short)VisUICmds.visCmdViewRulers); // 標尺
VisApplication.DoCmd((short)VisUICmds.visCmdViewGrid); // 網格
VisApplication.DoCmd((short)VisUICmds.visCmdCustProp); // 自訂屬性視窗
VisApplication.DoCmd((short)VisUICmds.visCmdShapesWindow); // 形狀視窗
VisApplication.DoCmd((short)VisUICmds.visCmdPanZoom); // 掃視縮放
所有命令 ID 定義於 VisUICmds 列舉,涵蓋 200+ 內建功能。
詳細實作見「圖紙縮放操作實作」一文,菜單與工具列下拉框共用 SetZoom(string) 方法,支援預設比例與自訂百分比。
[UI Layer]
├─ DockingControl (WeifenLuo DockPanel)
├─ VisioOCX (AxVisOcx)
├─ Menu/Toolbar/StatusBar
[Business Layer]
├─ PowerCutBLL (停電分析)
├─ DeviceBLL (設備管理)
├─ StencilBLL (模具管理)
└─ OperationLogBLL (操作日誌)
[DAL Layer]
├─ Enterprise Library Data Access Block
├─ DeviceDAL, VisioImageDAL, LogDAL...
└─ Stored Procedure 封裝
[Entity Layer]
├─ DeviceInfo, ShapeLogInfo, StencilPropertyInfo...
└─ 所有層共用 DTO
DAL 僅存取資料庫,不碰 Visio 物件;Visio 操作層僅存取 Visio 物件,不直連資料庫。兩者由 BLL 協調,共享 Entity 物件。
此架構支撐超過 5 萬行程式碼的專案穩定運行多年,是中大型 Visio 增益集的參考範本。