Share via


チュートリアル : Visual C# による Windows フォーム コントロールからの継承

Visual C# 2005 では、継承によって強力なカスタム コントロールを作成できます。継承を使用すると、標準の Windows フォーム コントロールの固有の機能をすべて保持しながら、カスタム機能も組み込んだコントロールを作成できます。このチュートリアルでは、ValueButton という名前の簡単な継承コントロールを作成します。このボタンは、標準の Windows フォーム Button コントロールの機能を継承し、ButtonValue というカスタム プロパティを公開します。

Noteメモ :

使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

プロジェクトの作成

新しいプロジェクトを作成するときには、その名前を指定することにより、ルート名前空間、アセンブリ名、およびプロジェクト名を設定し、既定のコンポーネントが正しい名前空間に含まれるようにします。

ValueButtonLib コントロール ライブラリおよび ValueButton コントロールを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックして [新しいプロジェクト] ダイアログ ボックスを開きます。

  2. [Visual C# プロジェクト] ボックスの一覧の [Windows コントロール ライブラリ] プロジェクト テンプレートを選択し、[プロジェクト名] ボックスに「ValueButtonLib」と入力します。

    プロジェクト名 ValueButtonLib は、既定でルート名前空間にも割り当てられます。ルート名前空間は、アセンブリ内のコンポーネント名の修飾に使用されます。たとえば、ValueButton という名前のコンポーネントが 2 つのアセンブリに含まれる場合は、ValueButtonLib.ValueButton という形で目的の ValueButton コンポーネントを指定できます。詳細については、「名前空間 (C# プログラミング ガイド)」を参照してください。

  3. ソリューション エクスプローラで、[UserControl1.cs] を右クリックし、ショートカット メニューの [名前の変更] をクリックします。ファイル名を「ValueButton.cs」に変更します。コード要素 "UserControl1" へのすべての参照の名前を変更するかどうかを確認するメッセージが表示されたら、[はい] をクリックします。

  4. ソリューション エクスプローラで [ValueButton.cs] を右クリックし、[コードの表示] をクリックします。

  5. class ステートメント行 public partial class ValueButton を見つけ、このコントロールの継承元である種類を UserControl から Button に変更します。これによって、継承されたコントロールは Button コントロールのすべての機能を継承できます。

  6. ソリューション エクスプローラで、[ValueButton.cs] ノードを開き、ValueButton.Designer.cs というデザイナ生成のコード ファイルを表示します。コード エディタでこのファイルを開きます。

  7. InitializeComponent メソッドを見つけ、AutoScaleMode プロパティを割り当てる行を削除します。このプロパティは、Button コントロールには存在しません。

  8. [ファイル] メニューの [すべてを保存] をクリックしてプロジェクトを保存します。

    Noteメモ :

    ビジュアルなデザイナは使用できなくなりました。Button コントロールは独自の描画を実行するため、デザイナでは表示を変更できません。ビジュアル表示は、コードで変更しない限り、継承元のクラス (つまり、Button) とまったく同じです。UI 要素のないコンポーネントをデザイン サーフェイスに追加することはできます。

継承したコントロールへのプロパティの追加

継承した Windows フォーム コントロールの可能な用途の 1 つとして、標準の Windows フォーム コントロールと同じ外観と操作性を持ちながらカスタム プロパティを公開するコントロールを作成できます。ここでは、コントロールに ButtonValue という名前のプロパティを追加します。

Value プロパティを追加するには

  1. ソリューション エクスプローラで、[ValueButton.cs] を右クリックし、ショートカット メニューの [コードの表示] をクリックします。

  2. class ステートメントを探します。始まりの中かっこ ({) の直後に、次のコードを入力します。

    [C#]

    // Creates the private variable that will store the value of your 
    // property.
    private int varValue;
    // Declares the property.
    public int ButtonValue
    {
       // Sets the method for retrieving the value of your property.
       get
       {
          return varValue;
       }
       // Sets the method for setting the value of your property.
       set
       {
          varValue = value;
       }
    }
    

    このコードは、ButtonValue プロパティの格納方法と取得方法を設定します。get ステートメントは、返された値をプライベート変数 varValue に格納されている値に設定します。set ステートメントは、value キーワードを使用してプライベート変数の値を設定します。

  3. [ファイル] メニューの [すべてを保存] をクリックしてプロジェクトを保存します。

コントロールのテスト

コントロールはスタンドアロン プロジェクトではないため、コンテナでホストする必要があります。コントロールをテストするには、コントロールを動作させるテスト プロジェクトを用意する必要があります。また、コントロールをビルド (コンパイル) して、テスト プロジェクトでコントロールにアクセスできるようにする必要があります。このセクションでは、コントロールをビルドして Windows フォームでテストします。

コントロールをビルドするには

  • [ビルド] メニューの [ソリューションのビルド] をクリックします。

    ビルドは、コンパイル エラーも警告もなしに完了します。

テスト プロジェクトを作成するには

  1. [ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックして [新しいプロジェクトの追加] ダイアログ ボックスを表示します。

  2. [Visual C#] ノードの下の [Windows] ノードを選択し、[Windows アプリケーション] をクリックします。

  3. [プロジェクト名] ボックスに「Test」と入力します。

  4. ソリューション エクスプローラで、テスト プロジェクトの [参照設定] ノードを右クリックし、ショートカット メニューの [参照の追加] をクリックして [参照の追加] ダイアログ ボックスを表示します。

  5. [プロジェクト] タブをクリックします。ValueButtonLib プロジェクトが [プロジェクト名] の下に表示されます。プロジェクトをダブルクリックしてテスト プロジェクトへの参照を追加します。

  6. ソリューション エクスプローラで、[Test] を右クリックし、[ビルド] をクリックします。

フォームにコントロールを追加するには

  1. ソリューション エクスプローラで、[Form1.cs] を右クリックし、ショートカット メニューの [デザイナの表示] をクリックします。

  2. ツールボックスの [ValueButtonLib コンポーネント] をクリックします。[ValueButton] をダブルクリックします。

    ValueButton がフォームに表示されます。

  3. [ValueButton] を右クリックし、ショートカット メニューの [プロパティ] をクリックします。

  4. [プロパティ] ウィンドウで、このコントロールのプロパティを調べます。標準のボタンによって公開されるのと同じプロパティの他に、追加のプロパティ ButtonValue が含まれています。

  5. ButtonValue プロパティを 5 に設定します。

  6. ツールボックスの [すべての Windows フォーム] タブで、[Label] をダブルクリックしてフォームに Label コントロールを追加します。

  7. ラベルをフォームの中央に配置し直します。

  8. valueButton1 をダブルクリックします。

    コード エディタが開き、valueButton1_Click イベントが表示されます。

  9. 次のコード行を挿入します。

    [C#]

    label1.Text = valueButton1.ButtonValue.ToString();
    
  10. ソリューション エクスプローラで [Test] を右クリックし、ショートカット メニューの [スタートアップ プロジェクトに設定] をクリックします。

  11. [デバッグ] メニューの [デバッグ開始] をクリックします。

    Form1 が表示されます。

  12. [valueButton1] をクリックします。

    label1 に数字 "5" が表示され、継承したコントロールの ButtonValue プロパティが valueButton1_Click メソッドを介して label1 に渡されたことを示します。このようにして、ValueButton コントロールは標準の Windows フォーム ボタンの機能をすべて継承しながら、追加のカスタム プロパティを公開します。

参照

処理手順

方法 : [ツールボックスのカスタマイズ] ダイアログ ボックスにコントロールを表示する
チュートリアル : Visual C# による複合コントロールの作成

その他の技術情報

コンポーネントによるプログラミング
コンポーネント作成のチュートリアル