建立選項頁面
本逐步解說會建立簡單的 [工具/選項] 頁面,使用屬性方格來檢查和設定屬性。
若要將這些屬性儲存至設定檔案並從中還原,請遵循下列步驟,然後參閱建立設定類別。
MPF 提供兩個類別,可協助您建立 [工具選項] 頁面、Package 類別和 DialogPage 類別。 將 Package
類別設定為子類別,即可建立 VSPackage 為這些頁面提供容器。 您可以透過從 DialogPage
類別衍生,來建立每個工具選項頁面。
建立 [工具選項] 方格頁面
在本節中,您會建立簡單的 [工具選項] 屬性方格。 您可以使用此方格來顯示和變更屬性的值。
建立 VSIX 專案並新增 VSPackage
每個 Visual Studio 延伸模組都是從 VSIX 部署專案開始,其中包含延伸模組資產。 建立名為
MyToolsOptionsExtension
的 Visual Studio VSIX 專案。 您可以在 [新增專案] 對話方塊中搜尋「vsix」來尋找 VSIX 專案範本。新增名為
MyToolsOptionsPackage
的 Visual Studio 封裝項目範本,以新增 VSPackage。 在 [方案總管] 中,以滑鼠右鍵按一下專案節點,並選取 [新增]>[新增項目]。 在 [加入新項目] 對話方塊中,移至 [Visual C# 項目]>[擴充性],然後選取 [Visual Studio 套件]。 在對話方塊底部的 [名稱] 欄位中,將檔名變更為MyToolsOptionsPackage.cs
。 如需如何建立 VSPackage 的詳細資訊,請參閱使用 VSPackage 建立延伸模組。
建立 [工具選項] 屬性方格
在程式碼編輯器中開啟 MyToolsOptionsPackage 檔案。
新增下列 using 陳述式。
using System.ComponentModel;
宣告
OptionPageGrid
類別,並從 DialogPage 衍生。public class OptionPageGrid : DialogPage { }
將 ProvideOptionPageAttribute 套用至
VSPackage
類別,為類別指派選項類別並為 OptionPageGrid 指派選項頁面名稱。 產生的結果應該如下所示:[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(GuidList.guidMyToolsOptionsPkgString)] [ProvideOptionPage(typeof(OptionPageGrid), "My Category", "My Grid Page", 0, 0, true)] public sealed class MyToolsOptionsPackage : Package
將
OptionInteger
屬性加入至OptionPageGrid
類別。套用System.ComponentModel.CategoryAttribute 為屬性指派屬性方格類別。
套用 System.ComponentModel.DisplayNameAttribute 為屬性指派名稱。
套用 System.ComponentModel.DescriptionAttribute 為屬性指派描述。
public class OptionPageGrid : DialogPage { private int optionInt = 256; [Category("My Category")] [DisplayName("My Integer Option")] [Description("My integer option")] public int OptionInteger { get { return optionInt; } set { optionInt = value; } } }
注意
DialogPage 的預設實作支援具有適當轉換器的屬性,或是可以展開為具有適當轉換器之屬性的結構或陣列的屬性。 如需轉換器的清單,請參閱 System.ComponentModel 命名空間。
建置此專案並開始偵錯。
在 Visual Studio 實驗執行個體中,按一下 [工具] 功能表上的 [選項]。
在左窗格中,您應該會看到 [My Category]。 (選項類別會依字母順序列出,因此應該會在清單的一半左右出現。開啟 [My Category],然後按一下 [My Grid Page]。 選項方格會出現在右窗格中。 屬性類別為 [My Options],而屬性名稱為 [My Integer Option]。 屬性描述 [My integer option] 會出現在窗格底部。 將值從 256 的初始值變更為其他值。 按一下 [確定],然後重新開啟 [My Grid Page]。 您可以看到新值會保存。
您也可以透過 Visual Studio 的搜尋方塊來存取選項頁面。 在靠近 IDE 頂端的搜尋方塊中,輸入「My Category」,您會看到結果中列出「My Category - My Grid Page」>。
建立工具選項自訂頁面
在本節中,您會使用自訂 UI 建立 [工具選項] 頁面。 您可以使用此頁面來顯示和變更屬性的值。
在程式碼編輯器中開啟 MyToolsOptionsPackage 檔案。
新增下列 using 陳述式。
using System.Windows.Forms;
在
OptionPageGrid
類別前面新增OptionPageCustom
類別。 從DialogPage
衍生新類別。public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } }
新增 GUID 屬性。 新增 OptionString 屬性:
[Guid("00000000-0000-0000-0000-000000000000")] public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } }
將第二個 ProvideOptionPageAttribute 套用至 VSPackage 類別。 這個屬性會為類別指派選項類別和選項頁面名稱。
[PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [ProvideMenuResource("Menus.ctmenu", 1)] [Guid(GuidList.guidMyToolsOptionsPkgString)] [ProvideOptionPage(typeof(OptionPageGrid), "My Category", "My Grid Page", 0, 0, true)] [ProvideOptionPage(typeof(OptionPageCustom), "My Category", "My Custom Page", 0, 0, true)] public sealed class MyToolsOptionsPackage : Package
將名為 MyUserControl 的新使用者控制項新增至專案。
將 TextBox 控制項新增至使用者控制項。
在 [屬性] 視窗中,按一下工具列上的 [事件] 按鈕,然後按一下 [離開] 事件。 新的事件處理常式會出現在 MyUserControl.cs 程式碼中。
將公用
OptionsPage
欄位、Initialize
方法新增至控制項類別,並更新事件處理常式,將選項值設定為文字方塊的內容:public partial class MyUserControl : UserControl { public MyUserControl() { InitializeComponent(); } internal OptionPageCustom optionsPage; public void Initialize() { textBox1.Text = optionsPage.OptionString; } private void textBox1_Leave(object sender, EventArgs e) { optionsPage.OptionString = textBox1.Text; } }
optionsPage
欄位會保存父系OptionPageCustom
執行個體的參考。Initialize
方法會將OptionString
顯示在 TextBox 中。 當焦點離開 TextBox 時,事件處理常式會將 TextBox 的目前值寫入OptionString
。在封裝程式碼檔案中,將
OptionPageCustom.Window
屬性的覆寫新增至OptionPageCustom
類別,以建立、初始化及傳回MyUserControl
的執行個體。 類別的外觀現在應該如下所示:[Guid("00000000-0000-0000-0000-000000000000")] public class OptionPageCustom : DialogPage { private string optionValue = "alpha"; public string OptionString { get { return optionValue; } set { optionValue = value; } } protected override IWin32Window Window { get { MyUserControl page = new MyUserControl(); page.optionsPage = this; page.Initialize(); return page; } } }
建置並執行專案。
在實驗執行個體中,按一下 [工具]>[選項]。
尋找 [My Category],然後 [My Custom Page]。
變更 OptionString 的值。 按一下 [確定],然後重新開啟 [My Custom Page]。 您可以看到新值已保存。
存取選項
在本節中,您會從裝載相關聯 [工具選項] 頁面的 VSPackage 取得選項的值。 您可以使用相同的方法來取得任何公用屬性的值。
在套件程式碼檔案中,將名為 OptionInteger 的公用屬性新增至 MyToolsOptionsPackage 類別。
public int OptionInteger { get { OptionPageGrid page = (OptionPageGrid)GetDialogPage(typeof(OptionPageGrid)); return page.OptionInteger; } }
此程式碼會呼叫 GetDialogPage 以建立或擷取
OptionPageGrid
執行個體。OptionPageGrid
會呼叫 LoadSettingsFromStorage 以載入其選項,其為公用屬性。現在,新增名為「MyToolsOptionsCommand」的自訂命令項目範本,以顯示值。 在 [加入新項目] 對話方塊中,移至 [Visual C#]>[擴充性],然後選取 [自訂命令]。 在視窗底部的 [名稱] 欄位中,將命令檔名變更為 MyToolsOptionsCommand.cs。
在 MyToolsOptionsCommand 檔案中,將命令的
ShowMessageBox
主體取代為下列內容:private void ShowMessageBox(object sender, EventArgs e) { MyToolsOptionsPackage myToolsOptionsPackage = this.package as MyToolsOptionsPackage; System.Windows.Forms.MessageBox.Show(string.Format(CultureInfo.CurrentCulture, "OptionInteger: {0}", myToolsOptionsPackage.OptionInteger)); }
建置此專案並開始偵錯。
在實驗執行個體中,按一下 [工具] 功能表上的 [叫用 MyToolsOptionsCommand] 。
訊息方塊會顯示
OptionInteger
的目前值。
開啟選項頁面
在本節中,您將新增命令和按鈕的事件,以開啟選項頁面
首先新增名為 OpenPageCommand.cs 的檔案。
然後,開啟 OpenPageCommand.cs 並變更 Execute 方法。
private void Execute(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); Type optionsPageType = typeof(OptionPageCustom); Instance.package.ShowOptionPage(optionsPageType); }
執行專案,然後按一下 [叫用] 按鈕 (預設位於 [工具] 選項底下),然後您可以看到選項頁面已開啟。
有關開啟選項頁面的詳細資訊,可以參考下列文件