チュートリアル: C# で Windows フォーム コントロールから継承する
C# では、"継承" を使用することで強力なカスタム コントロールを作成できます。 継承を使用すると、標準の Windows フォーム コントロールの固有の機能をすべて保持しながら、カスタム機能も組み込んだコントロールを作成できます。 このチュートリアルでは、ValueButton
という単純な継承されたコントロールを作成します。 このボタンは、Windows フォームの標準の Button コントロールから機能を継承し、ButtonValue
というカスタム プロパティを公開します。
プロジェクトの作成
新しいプロジェクトを作成するときは、ルート名前空間、アセンブリ名、プロジェクト名を設定し、既定のコンポーネントが適切な名前空間に含まれるようにするために、プロジェクトの名前を指定します。
ValueButtonLib コントロール ライブラリと ValueButton コントロールを作成するには
Visual Studio で、新しい Windows フォーム コントロール ライブラリ プロジェクトを作成し、ValueButtonLib という名前を設定します。
プロジェクト名
ValueButtonLib
は、既定でルート名前空間にも割り当てられます。 ルート名前空間は、アセンブリ内のコンポーネント名の修飾に使用されます。 たとえば、ValueButton
という名前のコンポーネントが 2 つのアセンブリに含まれている場合、ValueButtonLib.ValueButton
を使用して目的のValueButton
コンポーネントを指定できます。 詳細については、「名前空間」を参照してください。ソリューション エクスプローラーで、[UserControl1.cs] を右クリックし、ショートカット メニューの [名前の変更] をクリックします。 ファイル名を ValueButton.cs に変更します。 コード要素 "
UserControl1
" へのすべての参照の名前を変更するかどうかをたずねられたら、[はい] をクリックします。ソリューション エクスプローラーで、[ValueButton.cs] を右クリックし、[コードの表示] をクリックします。
class
ステートメント行のpublic partial class ValueButton
を見つけ、このコントロールの継承元の型を UserControl から Button に変更します。 これにより、継承されたコントロールは Button コントロールのすべての機能を継承できます。ソリューション エクスプローラーで、[ValueButton.cs] ノードを開いて、デザイナーによって生成されたコード ファイル (ValueButton.Designer.cs) を表示します。 このファイルをコード エディターで開きます。
InitializeComponent
メソッドを見つけ、AutoScaleMode プロパティを割り当てる行を削除します。 このプロパティは、Button コントロールには存在しません。[ファイル] メニューの [すべて保存] をクリックして、プロジェクトを保存します。
継承されたコントロールにプロパティを追加する
継承された Windows フォーム コントロールの考えられる用途の 1 つとして、外観は標準の Windows フォーム コントロールと同じでありながら、カスタム プロパティを公開するコントロールの作成があります。 このセクションでは、ButtonValue
というプロパティをコントロールに追加します。
Value プロパティを追加するには
ソリューション エクスプローラーで、[ValueButton.cs] を右クリックし、ショートカット メニューの [コードの表示] をクリックします。
class
ステートメントを探します。{
の直後に次のコードを入力します。// 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
キーワードを使用してプライベート変数の値を設定します。[ファイル] メニューの [すべて保存] をクリックして、プロジェクトを保存します。
コントロールをテストする
コントロールはスタンドアロン プロジェクトではないため、コンテナー内でホストする必要があります。 コントロールをテストするには、コントロールを実行するテスト プロジェクトを指定する必要があります。 また、コントロールをビルド (コンパイル) して、テスト プロジェクトからアクセスできるようにする必要があります。 このセクションでは、コントロールをビルドし、Windows フォームでテストします。
コントロールをビルドするには
[ビルド] メニューの [ソリューションのビルド] をクリックします。 コンパイル エラーも警告も発生せずに、ビルドが正常に完了します。
テスト プロジェクトを作成するには
[ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックして [新しいプロジェクトの追加] ダイアログ ボックスを開きます。
[Visual C#] ノードの下の [Windows] ノードを選択し、[Windows フォーム アプリケーション] をクリックします。
[名前] ボックスに「Test」と入力します。
ソリューション エクスプローラーで、テスト プロジェクトの [参照設定] ノードを右クリックし、ショートカット メニューの [参照の追加] をクリックして [参照の追加] ダイアログ ボックスを表示します。
[プロジェクト] というラベルのタブをクリックします。 [プロジェクト名] に ValueButtonLib プロジェクトが表示されます。 プロジェクトをダブルクリックして、テスト プロジェクトへの参照を追加します。
ソリューション エクスプローラーで、[Test] を右クリックし、[ビルド] をクリックします。
コントロールをフォームに追加するには
ソリューション エクスプローラーで、[Form1.cs] を右クリックし、ショートカット メニューの [デザイナーの表示] をクリックします。
ツールボックスの [ValueButtonLib コンポーネント] を選択します。 [ValueButton] をダブルクリックします。
ValueButton がフォームに表示されます。
[ValueButton] を右クリックし、ショートカット メニューの [プロパティ] をクリックします。
[プロパティ] ウィンドウで、このコントロールのプロパティを調べます。 プロパティは、追加のプロパティである ButtonValue がある点を除き、標準ボタンで公開されるプロパティと同じです。
ButtonValue プロパティを 5 に設定します。
ツールボックスの [すべての Windows フォーム] タブで、 [Label] をダブルクリックして Label コントロールをフォームに追加します。
ラベルをフォームの中央に配置し直します。
valueButton1
をダブルクリックします。コード エディターが開き、
valueButton1_Click
イベントが表示されます。次のコード行を挿入します。
label1.Text = valueButton1.ButtonValue.ToString();
ソリューション エクスプローラーで、[Test] を右クリックし、ショートカット メニューの [スタートアップ プロジェクトに設定] をクリックします。
[デバッグ] メニューの [デバッグの開始] をクリックします。
Form1
が表示されます。[
valueButton1
] をクリックします。label1
に数字の "5" が表示されます。これは、継承されたコントロールのButtonValue
プロパティが、valueButton1_Click
メソッドによってlabel1
に渡されたことを示しています。 このようにして、ValueButton
コントロールは標準の Windows フォーム ボタンの機能をすべて継承しながら、追加のカスタム プロパティを公開します。
関連項目
.NET Desktop feedback