- メニューバーに、新しく項目が追加される。
- ツールメニューに、新しく項目が追加される。
- ツール→オプションに、新しく項目が追加される。
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)
{
// 保存処理
}
}





















