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

Visual Studio 2008 擴展性開發(八):掌握工具視窗與自訂 ToolWindow

     編輯:關於.NET

Add-In 多半需要使用者介面。前文採用的主要方式是選單與自訂視窗。本文將介紹更多 UI 操作技巧:

  1. 存取與操作 VS 內建視窗(輸出視窗、命令視窗等)
  2. 建立自訂工具視窗

認識 VS 中的視窗體系

VS 中有各式視窗:方案總管、工具箱、輸出視窗、文字編輯器……雖外觀各異,但在自動化物件模型(AOM)中卻有共通結構。

1. 取得視窗參考

DTE2.Windows 集合實作 IEnumerable,可遍歷所有視窗:

foreach (Window win in _applicationObject.Windows) {
  _applicationObject.ToolWindows.OutputWindow.ActivePane.OutputString(win.Caption + Environment.NewLine);
}

亦可用索引或標題取得特定視窗,但索引不固定、標題易變(如方案總管標題含專案數)。幸運的是,內建工具視窗擁有唯一 GUID,透過 EnvDTE.Constants 定義的常數即可穩定存取:

Window slnWin = _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindSolutionExplorer);
slnWin.SetFocus();

這樣不僅方便,效能也優於索引/標題方式。

2. Window.Object 屬性:取得視窗專屬物件

通用的 Window 介面功能有限,若需針對特定視窗操作,可用 Object 屬性取得專屬物件:

Window taskListWin = _applicationObject.Windows.Item(EnvDTE.Constants.vsWindowKindTaskList);
TaskList taskList = taskListWin.Object as TaskList;
MessageBox.Show(string.Format("You have {0} tasks.", taskList.TaskItems.Count));

同理適用於命令視窗、錯誤清單等。對最重要的工具視窗,AOM 提供更便捷的 API。

3. ToolWindows 屬性:快速存取核心工具視窗

DTE.ToolWindows 直接暴露常用視窗,如輸出視窗:

OutputWindow outputWin = _applicationObject.ToolWindows.OutputWindow;
outputWin.OutputWindowPanes.Add("NEnhancer");
outputWin.OutputWindowPanes.Item("NEnhancer").OutputString("Hello!");

輸出視窗操作示例

4. UIHierarchy:樹狀結構視窗的底層模型

方案總管、伺服器總管、巨集總管等樹狀視窗,底層皆為 UIHierarchy、UIHierarchyItems、UIHierarchyItem 結構,前文操作方案總管時已接觸過。

建立自訂工具視窗

內建工具視窗畢竟有限,若需專屬功能,可建立自訂 ToolWindow。支援 ActiveX 控制項與 .NET 使用者控制項,此處介紹後者。

場景:VS 內建命令對應大量熱鍵,難以全記。若能在 VS 內查詢快捷鍵清單將非常方便。核心 API 為 Windows2.CreateToolWindow2:

Window CreateToolWindow2(AddIn Addin, string Assembly, string Class,
  string Caption, string GuidPosition, ref object ControlObject);

參數說明:

  • Addin:建立視窗的 Add-In 執行個體
  • Assembly:包含使用者控制項的組件完整名稱或路徑
  • Class:實作控制項的類別完整名稱
  • Caption:新視窗標題
  • GuidPosition:視窗唯一識別碼,用於在 Windows 集合中查找
  • ControlObject:要承載的使用者控制項

關鍵注意:呼叫 CreateToolWindow2 前,必須將使用者控制項移至 Add-In 組件中,或設定所有屬性使其對 COM 完全可見,否則控制項無法正確封送,方法將回傳 null。

實作程式碼

object programmingObj = null;
string guidString = "{41F8DEA8-EB07-45b7-9B1D-EB969DC43EC5}";
Windows2 windows2 = _applicationObject.Windows as Windows2;
Assembly asm = Assembly.GetExecutingAssembly();
shortcutListWindow = windows2.CreateToolWindow2(_addInInstance, asm.Location,
  "NEnhancer.ShortcutListControl", "Visual Studio Shortcut List",
  guidString, ref programmingObj);

ShortcutListControl 為實作快捷鍵查詢功能的使用者控制項。VS 將其實例載入工具視窗,使視窗擁有控制項功能;同時 VS 對所有工具視窗一視同仁,自訂視窗也支援浮動、停靠等標準操作。

何時建立視窗?

通常在 OnConnection 中建立,建議判斷 connectMode 為 ext_cm_AfterStartup 時才建立(此時 VS 主視窗已載入完成)。建立後在 檢視 選單新增項目顯示視窗,只需設定 Window.Visible = true。

自訂工具視窗:快捷鍵清單

圖中以標籤頁形式顯示,按分類列出快捷鍵與說明,資料來源為 dofactory。

ActiveX 控制項建立 ToolWindow 可參考《Working with Microsoft Visual Studio 2005》第 228 頁。

本篇小結

本文介紹 VS 工具視窗相關操作:存取操作內建視窗(方案總管、輸出視窗等),以及建立自訂工具視窗(示範快捷鍵查詢功能)。

出處:原文連結

程式碼下載:原始碼 | 可執行 Add-In(解壓後放入 [My Documents]\Visual Studio 2008\Addins)

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