オプションとオプション ページ

[ツール] メニューの [オプション] をクリックすると、[オプション] ダイアログ ボックスが開きます。 このダイアログ ボックス内のオプションは、総称してオプション ページと呼ばれます。 ナビゲーション ウィンドウのツリー コントロールにはオプション カテゴリが含まれていて、すべてのカテゴリにオプション ページがあります。 ページを選択すると、そのオプションが右側のウィンドウに表示されます。 これらのページでは、VSPackage の状態を決定するオプションの値を変更できます。

オプション ページのサポート

オプション ページとオプション カテゴリの作成は、Package クラスによってサポートされます。 オプション ページは、DialogPage クラスによって実装されます。

DialogPage の既定の実装では、プロパティの汎用グリッド内のユーザーに対して、パブリック プロパティが提供されます。 この動作をカスタマイズするには、ページのさまざまなメソッドをオーバーライドして、独自のユーザー インターフェイス (UI) を使ったカスタム オプション ページを作成します。 詳しくは、「オプション ページの作成」をご覧ください。

DialogPage クラスでは、IProfileManager が実装されます。これにより、オプション ページとユーザー設定に対する保持機能が提供されます。 LoadSettingsFromStorage メソッドと SaveSettingsToStorage メソッドの既定の実装では、プロパティと文字列との間での変換が可能な場合、プロパティの変更がレジストリのユーザー セクションに保持されます。

オプション ページのレジストリ パス

既定では、オプション ページによって管理されるプロパティのレジストリ パスは、UserRegistryRoot、DialogPage という文字列、およびオプション ページ クラスの型名を組み合わせることで決定されます。 たとえば、オプション ページ クラスは次のように定義できます。

namespace Company.OptionsPage
{
    public class OptionsPageGeneral : DialogPage
    {
    }
}

UserRegistryRoot が HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp の場合、プロパティ名と値のペアは、HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0Exp\DialogPage\Company.OptionsPage.OptionsPageGeneral のサブキーになります。

オプション ページ自体のレジストリ パスは、ApplicationRegistryRoot、ToolsOptionsPages という文字列、およびオプション ページのカテゴリと名前を組み合わせることで決定されます。 たとえば、Custom オプション ページのカテゴリが My Option Pages、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 で 2 つのオプション ページ (OptionsPageGeneral と OptionsPageCustom) を提供することを宣言しています。 これらのオプション ページは、[オプション] ダイアログ ボックスの [My Option Pages] カテゴリに、[General] および [Custom] という名前でそれぞれ表示されます。

オプションの属性とレイアウト

カスタム オプション ページ内のオプションの外観は、ページに表示されるユーザー インターフェイス (UI) によって決まります。 汎用オプション ページのオプションのレイアウト、ラベル付け、および説明は、次の属性によって決定されます。

  • CategoryAttribute では、オプションのカテゴリを決定します。

  • DisplayNameAttribute では、オプションの表示名を決定します。

  • DescriptionAttribute では、オプションの説明を決定します。

    Note

    同等の属性、SRCategory、LocDisplayName、および SRDescription では、ローカライズ用の文字列リソースを使用します。これらは、マネージド プロジェクトのサンプルで定義されています。

    次の コードがあるとします。

    [Category("My Options")]
    [DisplayName("Integer Option")]
    [Description("My integer option")]
    public int OptionInteger { get; set; }
    

OptionInteger オプションは、オプション ページで、[My Options] カテゴリの [Integer Option] として表示されます。 このオプションが選択されると、説明ボックスに「My integer option」という説明が表示されます。

別の VSPackage からオプション ページにアクセスする

オプション ページをホストおよび管理する 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 を見つけます。その後、ホストされているオプション ページ (この場合は My Grid Page) を通じてプロパティにアクセスします。

オートメーション プロパティのレジストリ パスは、ApplicationRegistryRoot、AutomationProperties という文字列、およびオプション ページのカテゴリと名前を組み合わせることで決定されます。 たとえば、オプション ページのカテゴリが My Category、名前が My Grid Page、ApplicationRegistryRoot が HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp である場合、オートメーション プロパティのレジストリ キーは、HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\AutomationProperties\My Category\My Grid Page になります。

Note

正規名である My Category.My Grid Page は、このキーの Name サブキーの値です。