Visual Studio 2008可擴充性開發(八):關於使用者介面的種種(上)

來源:互聯網
上載者:User

前言

Add-In大多需要一定的使用者介面,前面的隨筆中採用的主要方式是菜單和自訂表單 。對於菜單,可以是VS的主菜單,也可以是在某個特定的操作功能表,比如編輯器;對於 自訂表單,用起來也很簡單,就像在Windows應用程式中添加一個表單一樣。本文將介 紹關於使用者介面的其它內容,包括:

1) 訪問VS中的各個視窗,如Output視窗、Command視窗等;

2)建立自訂的工具視窗

關於VS中的視窗

我們在VS中會遇到各種視窗,如Solution Explorer、Toolbox、Output Window或者是 開啟的文字編輯器,雖然它們看起來各不相同,但是在AOM模型中它們仍然有共通之處。

1)訪問VS中的視窗

首先想到的一個問題,如何擷取上述視窗的引用?DTE2介面有一個Windows集合屬性, 通過它可以訪問某個特定的視窗。

該介面實現了IEnumerable,所以我們可以使用foreach語句對它進行遍曆:

C# Code - 遍曆VS的視窗集合

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

另外,通過Windows集合的Item方法,我們可以使用數字索引或視窗的標題擷取某個特 定的視窗,比如:

C# Code - 使用數字索引擷取Window引用

Window win = _applicationObject.Windows.Item(1);
win.SetFocus();

這種方式的問題在於,視窗的數字索引是不確定的,而視窗的標題也是如此。對於 Solution Explorer,當我們開啟一個解決方案時,它的標題是“Solution ‘NEnhancer ’ (6 projects)”這樣的格式。

幸運的是,對於VS內的工具視窗(Solution Explorer、Toolbox、Output Window等等 ),它們都有一個唯一的索引,這些索引是GUID,這樣就很容易擷取想要的視窗了:

C# Code - 使用GUID訪問Window

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

GUID顯然難以記住,所以這裡要使用EnvDTE.Constants中定義的常量,這樣不僅方便 擷取視窗,效能也要比使用數字或標題索引好一些(你可以試一下擷取Server Explorer )。

現在有辦法擷取視窗的引用了,不過Window介面畢竟是針對所有視窗的通用介面,如 果要針對某個視窗完成一些特定的任務,就需要考慮別的方法了。

2)Window介面的Object屬性

使用Object屬性可以擷取特定於某個視窗的對象,看下面的例子:

C# Code - 擷取工具視窗所承載的對象

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));

關於這個Object屬性,也許在看了後面的自訂工具視窗就很容易明白了。這裡通過 TaskList介面訪問Task List視窗。其它的視窗如Command Window、Error List等與此類 似。對於這些最重要的工具視窗,AOM提供了更為方便的API。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.