選項和選項頁
按兩下 [工具] 選單上的 [選項] 會開啟 [選項] 對話框。 此對話框中的選項統稱為 [選項] 頁面。 瀏覽窗格中的樹狀控件包含選項類別,而且每個類別都有選項頁面。 當您選取頁面時,其選項會出現在右窗格中。 這些頁面可讓您變更決定 VSPackage 狀態的選項值。
類別 Package 支援建立選項頁面和選項類別。 類別 DialogPage 會實作選項頁面。
的預設實 DialogPage 作會將其公用屬性提供給屬性的泛型方格中的使用者。 您可以覆寫頁面上的各種方法來自定義此行為,以建立具有其使用者介面 (UI) 的自定義選項頁面。 如需詳細資訊,請參閱 建立選項頁面。
類別 DialogPage 會實作 IProfileManager,它提供選項頁面的持續性,也提供使用者設定的持續性。 如果屬性可以轉換成字串,和 SaveSettingsToStorage 方法的預設實LoadSettingsFromStorage作會將屬性變更保存到登錄的用戶區段。
根據預設,選項頁面所管理之屬性的登錄路徑取決於結合 UserRegistryRoot、DialogPage 一詞,以及選項頁面類別的類型名稱。 例如,選項頁面類別的定義如下。
UserRegistryRoot如果 是 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp,則屬性名稱和值組是 HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp\DialogPage\Company.OptionsPage.OptionsPageGeneral 的屬性名稱和值組子機碼。
選項頁面本身的登錄路徑是由結合 ApplicationRegistryRoot、[工具][選項][頁面] 和 [選項] 頁面類別和名稱來決定。 例如,如果 [自定義選項] 頁面的類別為 [我的選項頁面],而 ApplicationRegistryRoot 是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp,則選項頁面具有登錄機碼,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\ToolsOptionsPages\My Option Pages\Custom。
屬性ProvideOptionPageAttribute會決定將自訂選項頁面分組為 [選項] 對話框導覽樹狀目錄中的類別。 屬性 ProvideOptionPageAttribute 會將選項頁面與提供 介面的 VSPackage 產生關聯。 請考慮下列程式碼片段:
[ProvideOptionPage(typeof(OptionsPageGeneral),"My Option Pages", "General", 101, 106, true)]
[ProvideOptionPage(typeof(OptionsPageCustom), "My Option Pages", "Custom", 101, 107, true)]
[Guid("B0002DC2-56EE-4931-93F7-70D6E9863940")]
public class MyPackage : Package
這會宣告 MyPackage 提供兩個選項頁面:OptionsPageGeneral 和 OptionsPageCustom。 在 [選項] 對話框中,這兩個選項頁面分別出現在 [我的選項頁面] 類別中,分別顯示為 [一般] 和 [自定義]。
頁面提供的使用者介面 (UI) 會決定自訂選項頁面中選項的外觀。 泛型選項頁面中選項的配置、標籤和描述取決於下列屬性:
CategoryAttribute 會決定選項的類別。
DisplayNameAttribute 會決定選項的顯示名稱。
DescriptionAttribute 會決定選項的描述。
注意
對等屬性、SRCategory、LocDisplayName 和 SRDescription 會使用字串資源進行當地語系化,並在 Managed 專案範例中定義。
請考慮下列程式碼片段:
OptionInteger 選項會出現在選項頁面上,作為 [我的選項] 類別中的 [整數選項]。 如果已選取此選項,則描述 [ 我的整數] 選項會出現在 [描述] 方塊中。
裝載和管理選項頁面的 VSPackage 可以使用自動化模型,以程式設計方式從另一個 VSPackage 存取。 例如,在下列程式代碼中,VSPackage 會註冊為裝載選項頁面。
[ProvideOptionPage(typeof(MyOptionPage), "My Category", "My Grid Page", 0, 0, true)]
[Guid("6bb6942e-014c-489e-a612-a935680f703d")]
public sealed class MyToolsOptions : Package
下列代碼段會從 MyOptionPage 取得 OptionInteger 的值:
DTE dte = (DTE)GetService(typeof(DTE));
EnvDTE.Properties props = dte.get_Properties("My Category", "My Grid Page");
int n = (int)props.Item("OptionInteger").Value;
ProvideOptionPageAttribute當屬性註冊選項頁面時,如果 SupportsAutomation
屬性的自變數為 true
,則會在 AutomationProperties 索引鍵下註冊頁面。 自動化會檢查此登錄專案以尋找相關聯的 VSPackage,然後自動化會透過託管的選項頁面存取 屬性,在此案例中為 [我的方格頁面]。
自動化屬性的登錄路徑是由結合 ApplicationRegistryRoot、word、AutomationProperties 和選項頁面類別和名稱來決定。 例如,如果選項頁面具有 [我的類別] 類別、[我的方格頁面名稱] 和 ApplicationRegistryRoot,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp,則 automation 屬性具有登錄機碼,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\AutomationProperties\My Category\My Grid Page。
注意
標準名稱 My Category.My Grid Page 是此索引鍵的 Name 子機碼值。