共用方式為


建立選項頁面

本逐步解說會建立簡單的 [工具/選項] 頁面,使用屬性方格來檢查和設定屬性。

若要將這些屬性儲存至設定檔案並從中還原,請遵循下列步驟,然後參閱建立設定類別

MPF 提供兩個類別,可協助您建立 [工具選項] 頁面、Package 類別和 DialogPage 類別。 將 Package 類別設定為子類別,即可建立 VSPackage 為這些頁面提供容器。 您可以透過從 DialogPage 類別衍生,來建立每個工具選項頁面。

建立 [工具選項] 方格頁面

在本節中,您會建立簡單的 [工具選項] 屬性方格。 您可以使用此方格來顯示和變更屬性的值。

建立 VSIX 專案並新增 VSPackage

  1. 每個 Visual Studio 延伸模組都是從 VSIX 部署專案開始,其中包含延伸模組資產。 建立名為 MyToolsOptionsExtension 的 Visual Studio VSIX 專案。 您可以在 [新增專案] 對話方塊中搜尋「vsix」來尋找 VSIX 專案範本。

  2. 新增名為 MyToolsOptionsPackage 的 Visual Studio 封裝項目範本,以新增 VSPackage。 在 [方案總管] 中,以滑鼠右鍵按一下專案節點,並選取 [新增]>[新增項目]。 在 [加入新項目] 對話方塊中,移至 [Visual C# 項目]>[擴充性],然後選取 [Visual Studio 套件]。 在對話方塊底部的 [名稱] 欄位中,將檔名變更為 MyToolsOptionsPackage.cs。 如需如何建立 VSPackage 的詳細資訊,請參閱使用 VSPackage 建立延伸模組

建立 [工具選項] 屬性方格

  1. 在程式碼編輯器中開啟 MyToolsOptionsPackage 檔案。

  2. 新增下列 using 陳述式。

    using System.ComponentModel;
    
  3. 宣告 OptionPageGrid 類別,並從 DialogPage 衍生。

    public class OptionPageGrid : DialogPage
    {  }
    
  4. 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
    
  5. OptionInteger 屬性加入至 OptionPageGrid 類別。

    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 命名空間。

  6. 建置此專案並開始偵錯。

  7. 在 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 建立 [工具選項] 頁面。 您可以使用此頁面來顯示和變更屬性的值。

  1. 在程式碼編輯器中開啟 MyToolsOptionsPackage 檔案。

  2. 新增下列 using 陳述式。

    using System.Windows.Forms;
    
  3. OptionPageGrid 類別前面新增 OptionPageCustom 類別。 從 DialogPage衍生新類別。

    public class OptionPageCustom : DialogPage
    {
        private string optionValue = "alpha";
    
        public string OptionString
        {
            get { return optionValue; }
            set { optionValue = value; }
        }
    }
    
  4. 新增 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; }
        }
    }
    
  5. 將第二個 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
    
  6. 將名為 MyUserControl 的新使用者控制項新增至專案。

  7. TextBox 控制項新增至使用者控制項。

    在 [屬性] 視窗中,按一下工具列上的 [事件] 按鈕,然後按一下 [離開] 事件。 新的事件處理常式會出現在 MyUserControl.cs 程式碼中。

  8. 將公用 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

  9. 在封裝程式碼檔案中,將 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;
            }
        }
    }
    
  10. 建置並執行專案。

  11. 在實驗執行個體中,按一下 [工具]>[選項]

  12. 尋找 [My Category],然後 [My Custom Page]

  13. 變更 OptionString 的值。 按一下 [確定],然後重新開啟 [My Custom Page]。 您可以看到新值已保存。

存取選項

在本節中,您會從裝載相關聯 [工具選項] 頁面的 VSPackage 取得選項的值。 您可以使用相同的方法來取得任何公用屬性的值。

  1. 在套件程式碼檔案中,將名為 OptionInteger 的公用屬性新增至 MyToolsOptionsPackage 類別。

    public int OptionInteger
    {
        get
        {
            OptionPageGrid page = (OptionPageGrid)GetDialogPage(typeof(OptionPageGrid));
            return page.OptionInteger;
        }
    }
    
    

    此程式碼會呼叫 GetDialogPage 以建立或擷取 OptionPageGrid 執行個體。 OptionPageGrid 會呼叫 LoadSettingsFromStorage 以載入其選項,其為公用屬性。

  2. 現在,新增名為「MyToolsOptionsCommand」的自訂命令項目範本,以顯示值。 在 [加入新項目] 對話方塊中,移至 [Visual C#]>[擴充性],然後選取 [自訂命令]。 在視窗底部的 [名稱] 欄位中,將命令檔名變更為 MyToolsOptionsCommand.cs

  3. 在 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));
    }
    
    
  4. 建置此專案並開始偵錯。

  5. 在實驗執行個體中,按一下 [工具] 功能表上的 [叫用 MyToolsOptionsCommand]

    訊息方塊會顯示 OptionInteger 的目前值。

開啟選項頁面

在本節中,您將新增命令和按鈕的事件,以開啟選項頁面

  1. 首先新增名為 OpenPageCommand.cs 的檔案。

  2. 然後,開啟 OpenPageCommand.cs 並變更 Execute 方法。

    private void Execute(object sender, EventArgs e)
    {
        ThreadHelper.ThrowIfNotOnUIThread();
        Type optionsPageType = typeof(OptionPageCustom);
        Instance.package.ShowOptionPage(optionsPageType);
    }
    
  3. 執行專案,然後按一下 [叫用] 按鈕 (預設位於 [工具] 選項底下),然後您可以看到選項頁面已開啟。

  4. 有關開啟選項頁面的詳細資訊,可以參考下列文件