Windows フォーム ツールボックス コントロールの作成
Visual Studio Extensibility Tools (VS SDK) に含まれている Windows フォーム ツールボックス コントロール項目テンプレートを使用すると、拡張機能のインストール時に自動的に追加されるツールボックス コントロールを作成できます。 このチュートリアルでは、他のユーザーに配布できる簡単なカウンター コントロールを、テンプレートを使用して作成する方法について説明します。
ツールボックス コントロールを作成する
Windows フォーム ツールボックス コントロール テンプレートでは、未定義のユーザー コントロールを作成できます。また、ツールボックスにコントロールを追加するために必要な機能がすべて用意されています。
Windows フォーム ツールボックス コントロールを使用して拡張機能を作成する
MyWinFormsControl
という名前の VSIX プロジェクトを作成します。 VSIX プロジェクト テンプレートは、[新しいプロジェクト] ダイアログで「vsix」と検索すると見つかります。プロジェクトが開いたら、
Counter
という名前の Windows フォーム ツールボックス コントロール項目テンプレートを追加します。 ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]>[新しい項目] の順に選択します。 [新しい項目の追加] ダイアログで、[Visual C#]>[機能拡張] の順にアクセスし、[Windows フォーム ツールボックス コントロール] を選択します。これにより、ユーザー コントロール、ツールボックスにコントロールを配置するための
ProvideToolboxControlAttribute
RegistrationAttribute、配置用の VSIX マニフェストの Microsoft.VisualStudio.ToolboxControl アセット エントリが追加されます。
コントロールのユーザー インターフェイスを構築する
Counter
コントロールには、現在のカウントを表示するための Label と、カウントを 0 にリセットするための Button の 2 つの子コントロールが必要です。 呼び出し元がプログラムでカウンターをインクリメントするため、これら以外の子コントロールは必要ありません。
ユーザー インターフェイスを作成するには
ソリューション エクスプローラーで Counter.cs をダブルクリックして、デザイナーで開きます。
[こちらをクリック] ボタンを削除します。これは、Windows フォーム ツールボックス コントロール項目テンプレートを追加するときに既定で含まれます。
ツールボックスから、
Label
コントロールと、その下にあるButton
コントロールをデザイン サーフェイスにドラッグします。ユーザー コントロール全体のサイズを 150, 50 ピクセルに変更し、ボタン コントロールのサイズを 50, 20 ピクセルに変更します。
[プロパティ] ウィンドウで、デザイン サーフェイス上のコントロールに対して次の値を設定します。
コントロール プロパティ 値 Label1
テキスト "" Button1
名前 btnReset Button1
テキスト リセット
ユーザー コントロールのコーディング
Counter
コントロールは、カウンターをインクリメントするメソッド、カウンターがインクリメントされると発生するイベント、および [Reset] ボタンを公開します。また、現在のカウント、表示テキスト、および [Reset] ボタンの表示または非表示の状態を格納するための、3 つのプロパティも公開します。 ProvideToolboxControl
属性は、 [ツールボックス] のどの場所に Counter
コントロールが表示されるかを判断します。
ユーザー コントロールのコーディングを行うには
フォームをダブルクリックすると、その読み込みイベント ハンドラーがコード ウィンドウに表示されます。
イベント ハンドラー メソッドの上にあるコントロール クラスで、次の例に示すように、カウンター値を格納する整数と表示テキストを格納する文字列を作成します。
int currentValue; string displayText;
次のパブリック プロパティ宣言を作成します。
public int Value { get { return currentValue; } } public string Message { get { return displayText; } set { displayText = value; } } public bool ShowReset { get { return btnReset.Visible; } set { btnReset.Visible = value; } }
呼び出し元では、これらのプロパティにアクセスして、カウンターの表示テキストを取得および設定したり、[Reset] ボタンの表示と非表示を切り替えたりすることができます。 呼び出し元では、読み取り専用の
Value
プロパティの現在の値を取得できますが、値を直接設定することはできません。コントロールの
Load
イベントに次のコードを追加します。private void Counter_Load(object sender, EventArgs e) { currentValue = 0; label1.Text = Message + Value; }
Load イベントのラベル テキストを設定すると、対象のプロパティの値が適用される前に読み込むことができます。 コンストラクターでラベル テキストを設定すると、空のラベルが生成されます。
次のように、カウンターをインクリメントするパブリック メソッドを作成します。
public void Increment() { currentValue++; label1.Text = displayText + Value; Incremented(this, EventArgs.Empty); }
Incremented
イベントの宣言をコントロール クラスに追加します。public event EventHandler Incremented;
呼び出し元では、このイベントにハンドラーを追加して、カウンターの値の変更に応答することができます。
デザイン ビューに戻り、[Reset] ボタンをダブルクリックして
btnReset_Click
イベント ハンドラーを生成します。 次に、以下の例に示すように入力します。private void btnReset_Click(object sender, EventArgs e) { currentValue = 0; label1.Text = displayText + Value; }
すぐに、クラス定義の上、
ProvideToolboxControl
属性の宣言内で、最初のパラメーターの値を"MyWinFormsControl.Counter"
から"General"
に変更します。 これにより、 [ツールボックス]のコントロールをホストする項目グループの名前が設定されます。次の例では、
ProvideToolboxControl
の属性と、調整されたクラス定義を示しています。[ProvideToolboxControl("General", false)] public partial class Counter : UserControl
コントロールをテストする
ツールボックス コントロールをテストする場合は、まず開発環境でテストし、その後で、コンパイルされたアプリケーションでテストします。
コントロールをテストするには
F5 キーを押してデバッグを開始します。
このコマンドを使用するとプロジェクトが構築され、コントロールがインストールされた Visual Studio の 2 つ目の実験用インスタンスが開きます。
Visual Studio の実験用インスタンスで、Windows フォーム アプリケーション プロジェクトを作成します。
ソリューション エクスプローラーで Form1.cs をダブルクリックして、デザイナーで開きます (まだ開いていない場合)。
ツールボックスでは、
Counter
コントロールが [全般] セクションに表示されます。Counter
コントロールをフォームにドラッグして選択します。Value
、Message
、ShowReset
の各プロパティが、UserControl から継承されたプロパティと一緒に、[プロパティ] ウィンドウに表示されます。Message
プロパティをCount:
に設定します。Button コントロールをフォームにドラッグし、ボタンの名前プロパティとテキスト プロパティを
Test
に設定します。ボタンをダブルクリックしてコード ビューで Form1.cs を開き、クリック ハンドラーを作成します。
クリック ハンドラーで、
counter1.Increment()
を呼び出します。コンストラクター関数で、
InitializeComponent
の呼び出しの後に「counter1``.``Incremented +=
」と入力し、Tab キーを 2 回押します。Visual Studio によって、
counter1.Incremented
イベントのフォーム レベルのハンドラーが生成されます。イベント ハンドラーで
Throw
ステートメントを強調表示し、「mbox
」と入力します。Tab キーを 2 回押すと、mbox コード スニペットからメッセージ ボックスが生成されます。次の行で、以下の
if
/else
ブロックを追加して、[Reset] ボタンの表示を設定します。if (counter1.Value < 5) counter1.ShowReset = false; else counter1.ShowReset = true;
F5 キーを押します。
フォームが開きます。
Counter
コントロールに次のテキストが表示されます。Count: 0
[Test] を選択します。
カウンターの値が増加し、Visual Studio によってメッセージ ボックスが表示されます。
メッセージ ボックスを閉じます。
[Reset] ボタンが消えます。
カウンターが 5 に到達するまで [Test] を選択し、毎回メッセージ ボックスを閉じます。
[Reset] ボタンが再び表示されます。
リセットを選択します。
カウンターが 0 にリセットされます。
次のステップ
ツールボックス コントロールを構築すると、Visual Studio によって、プロジェクトの \bin\debug\ フォルダーに ProjectName.vsix という名前のファイルが作成されます。 コントロールは、.vsix ファイルをネットワークや Web サイトにアップロードすることで展開できます。 この .vsix ファイルをユーザーが開くと、コントロールがユーザーのコンピューターにインストールされ、Visual Studio のツールボックスに追加されます。 または、.vsix ファイルを Visual Studio Marketplace にアップロードして、ユーザーが [ツール]>[拡張機能と更新プログラム] ダイアログで検索できるようにすることもできます。