Windows フォーム ツールボックス コントロールの作成

Visual Studio Extensibility Tools (VS SDK) に含まれている Windows フォーム ツールボックス コントロール項目テンプレートを使用すると、拡張機能のインストール時に自動的に追加されるツールボックス コントロールを作成できます。 このチュートリアルでは、他のユーザーに配布できる簡単なカウンター コントロールを、テンプレートを使用して作成する方法について説明します。

ツールボックス コントロールを作成する

Windows フォーム ツールボックス コントロール テンプレートでは、未定義のユーザー コントロールを作成できます。また、ツールボックスにコントロールを追加するために必要な機能がすべて用意されています。

Windows フォーム ツールボックス コントロールを使用して拡張機能を作成する

  1. MyWinFormsControl という名前の VSIX プロジェクトを作成します。 VSIX プロジェクト テンプレートは、[新しいプロジェクト] ダイアログで「vsix」と検索すると見つかります。

  2. プロジェクトが開いたら、Counter という名前の Windows フォーム ツールボックス コントロール項目テンプレートを追加します。 ソリューション エクスプローラーで、プロジェクト ノードを右クリックして、[追加]>[新しい項目] の順に選択します。 [新しい項目の追加] ダイアログで、[Visual C#]>[機能拡張] の順にアクセスし、[Windows フォーム ツールボックス コントロール] を選択します。

  3. これにより、ユーザー コントロール、ツールボックスにコントロールを配置するための ProvideToolboxControlAttributeRegistrationAttribute、配置用の VSIX マニフェストの Microsoft.VisualStudio.ToolboxControl アセット エントリが追加されます。

コントロールのユーザー インターフェイスを構築する

Counter コントロールには、現在のカウントを表示するための Label と、カウントを 0 にリセットするための Button の 2 つの子コントロールが必要です。 呼び出し元がプログラムでカウンターをインクリメントするため、これら以外の子コントロールは必要ありません。

ユーザー インターフェイスを作成するには

  1. ソリューション エクスプローラーCounter.cs をダブルクリックして、デザイナーで開きます。

  2. [こちらをクリック] ボタンを削除します。これは、Windows フォーム ツールボックス コントロール項目テンプレートを追加するときに既定で含まれます。

  3. ツールボックスから、Label コントロールと、その下にある Button コントロールをデザイン サーフェイスにドラッグします。

  4. ユーザー コントロール全体のサイズを 150, 50 ピクセルに変更し、ボタン コントロールのサイズを 50, 20 ピクセルに変更します。

  5. [プロパティ] ウィンドウで、デザイン サーフェイス上のコントロールに対して次の値を設定します。

    コントロール プロパティ
    Label1 テキスト ""
    Button1 名前 btnReset
    Button1 テキスト リセット

ユーザー コントロールのコーディング

Counter コントロールは、カウンターをインクリメントするメソッド、カウンターがインクリメントされると発生するイベント、および [Reset] ボタンを公開します。また、現在のカウント、表示テキスト、および [Reset] ボタンの表示または非表示の状態を格納するための、3 つのプロパティも公開します。 ProvideToolboxControl 属性は、 [ツールボックス] のどの場所に Counter コントロールが表示されるかを判断します。

ユーザー コントロールのコーディングを行うには

  1. フォームをダブルクリックすると、その読み込みイベント ハンドラーがコード ウィンドウに表示されます。

  2. イベント ハンドラー メソッドの上にあるコントロール クラスで、次の例に示すように、カウンター値を格納する整数と表示テキストを格納する文字列を作成します。

    int currentValue;
    string displayText;
    
  3. 次のパブリック プロパティ宣言を作成します。

    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 プロパティの現在の値を取得できますが、値を直接設定することはできません。

  4. コントロールの Load イベントに次のコードを追加します。

    private void Counter_Load(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = Message + Value;
    }
    
    

    Load イベントのラベル テキストを設定すると、対象のプロパティの値が適用される前に読み込むことができます。 コンストラクターでラベル テキストを設定すると、空のラベルが生成されます。

  5. 次のように、カウンターをインクリメントするパブリック メソッドを作成します。

    public void Increment()
    {
        currentValue++;
        label1.Text = displayText + Value;
        Incremented(this, EventArgs.Empty);
    }
    
    
  6. Incremented イベントの宣言をコントロール クラスに追加します。

    public event EventHandler Incremented;
    

    呼び出し元では、このイベントにハンドラーを追加して、カウンターの値の変更に応答することができます。

  7. デザイン ビューに戻り、[Reset] ボタンをダブルクリックして btnReset_Click イベント ハンドラーを生成します。 次に、以下の例に示すように入力します。

    private void btnReset_Click(object sender, EventArgs e)
    {
        currentValue = 0;
        label1.Text = displayText + Value;
    }
    
    
  8. すぐに、クラス定義の上、 ProvideToolboxControl 属性の宣言内で、最初のパラメーターの値を "MyWinFormsControl.Counter" から "General"に変更します。 これにより、 [ツールボックス]のコントロールをホストする項目グループの名前が設定されます。

    次の例では、 ProvideToolboxControl の属性と、調整されたクラス定義を示しています。

    [ProvideToolboxControl("General", false)]
    public partial class Counter : UserControl
    

コントロールをテストする

ツールボックス コントロールをテストする場合は、まず開発環境でテストし、その後で、コンパイルされたアプリケーションでテストします。

コントロールをテストするには

  1. F5 キーを押してデバッグを開始します。

    このコマンドを使用するとプロジェクトが構築され、コントロールがインストールされた Visual Studio の 2 つ目の実験用インスタンスが開きます。

  2. Visual Studio の実験用インスタンスで、Windows フォーム アプリケーション プロジェクトを作成します。

  3. ソリューション エクスプローラーForm1.cs をダブルクリックして、デザイナーで開きます (まだ開いていない場合)。

  4. ツールボックスでは、Counter コントロールが [全般] セクションに表示されます。

  5. Counter コントロールをフォームにドラッグして選択します。 ValueMessageShowReset の各プロパティが、UserControl から継承されたプロパティと一緒に、[プロパティ] ウィンドウに表示されます。

  6. Message プロパティを Count:に設定します。

  7. Button コントロールをフォームにドラッグし、ボタンの名前プロパティとテキスト プロパティを Test に設定します。

  8. ボタンをダブルクリックしてコード ビューで Form1.cs を開き、クリック ハンドラーを作成します。

  9. クリック ハンドラーで、counter1.Increment() を呼び出します。

  10. コンストラクター関数で、InitializeComponent の呼び出しの後に「counter1``.``Incremented +=」と入力し、Tab キーを 2 回押します。

    Visual Studio によって、counter1.Incremented イベントのフォーム レベルのハンドラーが生成されます。

  11. イベント ハンドラーで Throw ステートメントを強調表示し、「mbox」と入力します。Tab キーを 2 回押すと、mbox コード スニペットからメッセージ ボックスが生成されます。

  12. 次の行で、以下の if/else ブロックを追加して、[Reset] ボタンの表示を設定します。

    if (counter1.Value < 5) counter1.ShowReset = false;
    else counter1.ShowReset = true;
    
  13. F5 キーを押します。

    フォームが開きます。 Counter コントロールに次のテキストが表示されます。

    Count: 0

  14. [Test] を選択します。

    カウンターの値が増加し、Visual Studio によってメッセージ ボックスが表示されます。

  15. メッセージ ボックスを閉じます。

    [Reset] ボタンが消えます。

  16. カウンターが 5 に到達するまで [Test] を選択し、毎回メッセージ ボックスを閉じます。

    [Reset] ボタンが再び表示されます。

  17. リセットを選択します。

    カウンターが 0 にリセットされます。

次のステップ

ツールボックス コントロールを構築すると、Visual Studio によって、プロジェクトの \bin\debug\ フォルダーに ProjectName.vsix という名前のファイルが作成されます。 コントロールは、.vsix ファイルをネットワークや Web サイトにアップロードすることで展開できます。 この .vsix ファイルをユーザーが開くと、コントロールがユーザーのコンピューターにインストールされ、Visual Studio のツールボックスに追加されます。 または、.vsix ファイルを Visual Studio Marketplace にアップロードして、ユーザーが [ツール]>[拡張機能と更新プログラム] ダイアログで検索できるようにすることもできます。