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

C# 文本編輯器開發實戰(五):指令模式、剪貼板多格式支援與 VBA 腳本深度整合

     編輯:關於C語言

指令模式:解耦編輯操作與 UI

編輯操作數十種(複製、貼上、字體、插圖…),若全部寫在 TextDocument 會導致類別膨脹。引入 指令模式:

  • 抽象基類 EditorAction:定義 HotKey、ActionName、IsEnabled、Execute、TestHotKey 等統一介面。
  • 具體指令:EditorCopyAction 等,封裝單一操作邏輯,熱鍵綁定(如 Ctrl+C)。
  • TextDocument.Actions 集合管理所有指令,焦點處自動掃描熱鍵觸發;UI 依 IsEnabled 動態啟用/禁用按鈕選單。
  • 擴展性:外部模組可動態註冊自訂指令,熱鍵可使用者自訂。
  • 靈感來源:SharpDevelop 文字編輯器原始碼,實戰驗證高效。

剪貼板多格式資料交換

單次複製同時寫入多種格式,貼上時智慧選擇:

  • 使用 DataObject + SetData(format, data) 寫入:純文字(相容記事本)、自訂 XML 序列化(保留完整格式與物件結構)。
  • 貼上時 Clipboard.GetDataObject() 取得 IDataObject,優先檢測自訂格式 → 解析 XML 還原物件樹;次之純文字 → 建立基本字符元素。
  • 實現跨應用程式的無縫格式保真交換。

VBA 腳本引擎:VB.NET 為宿主的文檔自動化

核心架構

  • 引擎:VBScriptEngine 繼承 VsaEngine,註冊全域物件(document、dbconnection、eventobj、vbsystem)、必要組件參考。
  • 站點:TextDocumentVsaSite 實作 IVsaSite,GetGlobalInstance 依名稱回傳對應物件;OnCompilerError 處理編譯錯誤。

動態 document.all 實作

文檔元素具名且動態變化,需執行期產生型別:

  1. 建立 AssemblyName、AssemblyBuilder、ModuleBuilder、TypeBuilder(AllElements)。
  2. 掃描文檔建立「名稱→元素」雜湊表。
  3. 對每個名稱用 DefineField 建立 public object 欄位。
  4. CreateType 產生型別並實例化,再用 InvokeMember 填入元素參考。
  5. 文檔變更時重建型別與實例。

事件模擬與工具函數

  • 元素支援 onchange,內容修改時查找 元素名_OnChange 並執行。
  • vbsystem 提供 Alert、Confirm、Prompt、DebugPrint 等全域函數,腳本可直接呼叫。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved