- メニューバーに、新しく項目が追加される。
- ツールメニューに、新しく項目が追加される。
- ツール→オプションに、新しく項目が追加される。
1と2は、設定画面も作らなくてはならないので、パス。
(そんなスゴイものを作るわけでもないし)
というわけで、3の方法をage
まずプロジェクトに、新しいクラスを追加する。
namespace Company.VSPackage7 { using Microsoft.VisualStudio.Shell; public class MyOptionPage : DialogPage { public bool MyProperty { get; set; } } }
つぎに、拡張機能でオプションページを使う宣言を追加する
namespace Company.VSPackage7 { using System; using System.Diagnostics; using System.Globalization; using System.Runtime.InteropServices; using Microsoft.VisualStudio.Shell; [PackageRegistration(UseManagedResourcesOnly = true)] [InstalledProductRegistration("#110", "#112", "1.0", IconResourceID = 400)] [ProvideOptionPage(typeof(MyOptionPage), "MyOption", "General", 0, 0, true)] [Guid(GuidList.guidVSPackage7PkgString)] public sealed class VSPackage7Package : Package { public VSPackage7Package() { Debug.WriteLine( ... }
これだけで、オプションページが表示されるようになる。
PropertyGridと同じ属性が使えるようだ
namespace Company.VSPackage7 { using System.ComponentModel; using Microsoft.VisualStudio.Shell; public class MyOptionPage : DialogPage { [Category("なにか")] [DisplayName("なにかのON/OFF")] [Description("なにかをON/OFFします。")] public bool MyProperty { get; set; } } }
もちろん、親のインスタンスにもアクセスできる
(MyOptionPageのインスタンスは、勝手に作られて勝手に消えるので、アクセス出来ないと困る)
public class MyOptionPage : DialogPage { public override void LoadSettingsFromStorage() { var obj = GetService(typeof(VSPackage7Package)) as VSPackage7Package; if (obj != null) { // 読込処理 } } public override void SaveSettingsToStorage() { var obj = GetService(typeof(VSPackage7Package)) as VSPackage7Package; if (obj != null) { // 保存処理 } }