程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> Visual Studio 2008可擴展性開發(八):關於用戶界面的種種(下)

Visual Studio 2008可擴展性開發(八):關於用戶界面的種種(下)

編輯:關於.NET

關於用戶界面的種種(上)一文介紹了VS中的工具窗口。關於用戶界面還有更多的內 容,比如選項頁(Options Page)、菜單圖標,具體來說,本文介紹的內容將包括:

1)創建自定義的選項頁;

2)設置菜單項的圖標;

創建自定義的選項頁

在安裝了DPack後,可以在VS的選項頁(Tools->Options)中看到新添加的一項:

這看起來很專業。很多時候我們開發的Add-In需要進行一定的配置,選項頁是最佳選 擇:VS的用戶一般習慣於在此處進行各種配置,所以把配置界面放在其它地方就顯得突兀 了。

對Add-In來說,我們需要實現IDTExtensibility2接口,這樣可以將其交由VS來管理, 選項頁的實現與此類似,不過這裡的接口是IDTToolsOptionsPage(從Add-In和選項頁的 開發過程中,我們也可以考慮如何開發自己的“插件式”應用程序)。具體來說,分為兩 步:

1)創建用戶控件(User Control)來實現IDTToolsOptionsPage

該接口有5個方法,具體可以參看這裡。其中最重要的是OnAfterCreated()和OnOK(), 前者在VS呈現選項頁時執行,後者在用戶點擊OK時執行。

2)在.Addin文件中添加新選項頁的配置

此時需要節點<ToolsOptionsPage>,VS將根據該節點加載選項頁。

下面通過一個簡單的例子來介紹具體的實現過程。

搜索編輯器中的選中文本

我們在編寫代碼的時候,經常需要搜索一些相關的內容,比如某個類型的信息,這時 就復制類的名稱,打開浏覽器,打開Google,搜索那個類,有時可能會在其它搜索引擎或 MSDN搜索。如果能把搜索的過程集成到VS中,是不是就方便了呢?

實現這個功能很簡單。只要獲取當前選中的文本,然後通過默認浏覽器打開相應的URL 就可以了:

C# Code - Search Text(version 1)

private static readonly string MSDN_URL_FORMAT =
             "http://social.msdn.microsoft.com/Search/en-AU/?query={0}&ac=8";
         private static readonly string GOOGLE_URL_FORMAT =
             "http://www.google.cn/search?source=igchina&hl=zh-CN&q={0} &btnG=Google+%E6%90%9C%E7%B4%A2&aq=f";

private void LaunchUrlInDefaultBrowser(string url)
{
     System.Diagnostics.Process.Start(url);
}

private void SearchInMsdnCmdEvent_Click(object CommandBarControl, ref  bool Handled, ref bool CancelDefault)
{
     string url = string.Format(MSDN_URL_FORMAT,  helper.GetSelectedText());
     LaunchUrlInDefaultBrowser(url);
}

private void SearchInGoogleCmdEvent_Click(object CommandBarControl, ref  bool Handled, ref bool CancelDefault)
{
     string url = string.Format(GOOGLE_URL_FORMAT,  helper.GetSelectedText());
     LaunchUrlInDefaultBrowser(url);
}

可以在代碼裡面把URL作為常量來寫,不過做成可配置的要好一些,這樣修改時無須編 譯,而且可以添加新的搜索引擎,現在通過選項頁來實現。首先得創建一個用戶控件 SearchTextOptionsPage,大體思路是在OnAfterCreated方法中根據xml中的配置動態生成 控件供用戶設置,並在OnOK方法中保存用戶所做的設置:

C# Code - 實現IDTToolsOptionsPage接口

public void OnAfterCreated(DTE DTEObject)
{
     List<SearchEngine> engines =  SearchEngineConfigManager.Instance.GetSearchEngines();
     for (int i = 0; i < engines.Count; i++)
     {
         this.Controls.Add(CreateSearchEngineLabel(engines[i],  i));
         this.Controls.Add(CreateSearchEngineTextBox(engines[i],  i));
     }
}

public void OnOK()
{
     List<SearchEngine> engines = new  List<SearchEngine>();
     foreach (Control ctrl in Controls)
     {
         if (ctrl is TextBox)
         {
             TextBox txt = ctrl as TextBox;
             int leftIndex = 3;
             int rightIndex = txt.Name.IndexOf("Url");
             string engineName = txt.Name.Substring (leftIndex, rightIndex - leftIndex);
             string description = txt.Tag as string;
             engines.Add(new SearchEngine()
             {
                 Name = engineName,
                 Url = txt.Text.Trim(),
                 Description = description
             });
         }
     }

     SearchEngineConfigManager.Instance.Save(engines);
}

SearchEngineConfigManager是對xml文件進行操作的類。接下來要把選項頁注冊一下 ,在.Addin文件的根節點下添加如下內容:

XML Code - 注冊Options Page

<ToolsOptionsPage>
     <Category Name="NEnhancer">
         <SubCategory Name="SearchTextInWeb">
             <Assembly>NEnhancer.dll</Assembly>
             <FullClassName>NEnhancer.UserControls.SearchTextOptionsPage</FullClas sName>
         </SubCategory>
     </Category>
</ToolsOptionsPage>

現在選項頁看起來是這樣的:

設置菜單項的圖標

在VS的內置的菜單項中,相當一部分擁有自己的圖標,這些圖標使得所對應的命令更 為直觀,現在來看看如何添加這樣的圖標。

在此之前,我們曾經使用過兩種方法添加菜單項,一是AddNamedCommand2方法,它的 兩個參數MSOButton、Bitmap共同指定了是否使用Office位圖以及使用哪一個位圖,如果 使用Office位圖的話,就將MSOButton設置為true,並通過Bitmap指定所使用位圖的索引 ,如果是59,那就是經典的笑臉了。

第二種方法是通過CommandBarButton控件添加,比如:

CommandBarButton searchCmd = helper.AddButtonToPopup (searchThisPopup, searchThisPopup.Controls.Count + 1,
                         e.Name, "Search in " +  e.Name);

對於CommandBarButton來說,它的FaceId屬性可用來指定Office位圖,其取值跟上面 的Bitmap參數是一樣的,這樣我們可以在添加CommandBarButton時設定圖標了。如果要了 解所有的位圖索引信息,可以參考這個頁面Office CommandBarButton FaceId。

最後,我們還可以使用自己創建的圖標,具體過程可以參考Displaying custom bitmap for VS add-in,或者《Working with Microsoft Visual Studio 2005》一書的 148頁,此處不再贅述。

可以從這裡下載代碼,也可以在這裡下載可運行的Add-In(解壓縮後將文件放在[My Documents Path]\Visual Studio 2008\Addins下)。

我們身在何處?

本文著重介紹了如何為Add-In添加選項頁(Options Page),這樣可以為用戶提供較 為專業的配置界面,然後簡單介紹了如何設置菜單項的圖標。這一次的例子是 SearchTextInWeb,可以直接打開浏覽器搜索VS的選中文本,相信會你帶來一些方便。

感謝:文中帶有文本標注的截圖來自於一個好玩的工具PrtScr,那些沒有標注的截圖 則來自於PicPick。

出處:http://anderslly.cnblogs.com

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved