上一篇介紹了 VS 中的工具視窗操作。本文繼續深入使用者介面主題,著重於兩項實用技巧:
安裝 DPack 後,在 工具 → 選項 中會出現新增的分類,這樣的整合顯得非常專業。對於需要配置的 Add-In,選項頁是最佳選擇——VS 使用者習慣在此集中設定,將配置介面放在其他位置反而顯得突兀。

Add-In 實作 IDTExtensibility2 讓 VS 管理生命週期;選項頁類似,需實作 IDTToolsOptionsPage 介面。具體分兩步:
IDTToolsOptionsPage.Addin 檔案中註冊該介面有五個方法,核心是 OnAfterCreated()(VS 呈現選項頁時觸發)與 OnOK()(使用者按下確定時觸發)。註冊時需在 .Addin 根節點下加入 <ToolsOptionsPage> 區塊,VS 依此載入。
寫代碼時常需搜尋類型資訊:複製名稱 → 開啟瀏覽器 → 打開 Google/MSDN → 貼上搜尋。若能整合到 VS 內部,效率將大幅提升。

核心邏輯極簡單:取得選取文字,透過預設瀏覽器開啟對應 URL。
private static readonly string MSDN_URL_FORMAT =
"https://social.msdn.microsoft.com/Search/en-AU/?query={0}&ac=8";
private static readonly string GOOGLE_URL_FORMAT =
"https://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(...) {
string url = string.Format(MSDN_URL_FORMAT, helper.GetSelectedText());
LaunchUrlInDefaultBrowser(url);
}
private void SearchInGoogleCmdEvent_Click(...) {
string url = string.Format(GOOGLE_URL_FORMAT, helper.GetSelectedText());
LaunchUrlInDefaultBrowser(url);
}
將 URL 寫死在代碼裡雖可行,但做成可配置更佳:免重新編譯、可動態新增搜尋引擎。以下透過選項頁實現。
名為 SearchTextOptionsPage,核心思路:
OnAfterCreated:依 XML 設定動態產生標籤與文字方塊供使用者設定OnOK:讀取使用者輸入並儲存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 註冊:
<ToolsOptionsPage>
<Category Name="NEnhancer">
<SubCategory Name="SearchTextInWeb">
<Assembly>NEnhancer.dll</Assembly>
<FullClassName>NEnhancer.UserControls.SearchTextOptionsPage</FullClassName>
</SubCategory>
</Category>
</ToolsOptionsPage>
完成後選項頁如下:

VS 內建選單項多有專屬圖示,讓命令更直觀。先前介紹過兩種新增選單的方式:
AddNamedCommand2:透過 MSOButton、Bitmap 參數指定 Office 內建圖示索引(如 59 為經典笑臉)CommandBarButton 控制項:設定 FaceId 屬性指定 Office 圖示,索引同上
所有 Office 圖示索引可參考 Office CommandBarButton FaceId 頁面。若需使用自訂圖示,可參考 Displaying custom bitmap for VS add-in 或《Working with Microsoft Visual Studio 2005》第 148 頁。
本文示範如何為 Add-In 新增專業的選項頁配置介面,並簡述選單圖示設定技巧。範例 SearchTextInWeb 可直接在 VS 內以預設瀏覽器搜尋選取文字,相信能為日常開發帶來便利。
感謝:帶文字標註的截圖來自 PrtScr,其餘來自 PicPick。
出處:https://anderslly.cnblogs.com
程式碼下載:原始碼 | 可執行 Add-In(解壓後放入 [My Documents]\Visual Studio 2008\Addins)