Visual J# には、継承を使って強力なカスタム コントロールを作成する機能が用意されています。継承を使って、標準 Windows フォーム コントロールの固有の機能をすべて維持しながら、カスタム機能を取り込んだコントロールを作成できます。このチュートリアルでは、ValueButton という名前の簡単な継承コントロールを作成します。このボタンは、標準 Windows フォーム ボタンの機能を継承し、ButtonValue という名前のカスタム メンバを公開します。
プロジェクトの作成
新しいプロジェクトを作成するときは、名前を指定することによって、ルート パッケージ、アセンブリ名、およびプロジェクト名が設定され、既定のコンポーネントが適切なパッケージに含まれるようになります。
ValueButtonLib コントロール ライブラリおよび ValueButton コントロールを作成するには
- [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックして [新しいプロジェクト] ダイアログ ボックスを表示します。
- [Visual J# プロジェクト] ボックスの一覧の [Windows コントロール ライブラリ] プロジェクト テンプレートをクリックし、[プロジェクト名] ボックスに「ValueButtonLib」と入力します。
特に指定しない限り、プロジェクト名の ValueButtonLib がルート パッケージにも割り当てられます。ルート パッケージは、アセンブリ内のコンポーネントの名前を限定するために使用されます。たとえば、ValueButton という名前のコンポーネントが 2 つのアセンブリに含まれる場合は、ValueButtonLib.ValueButton という形で目的の ValueButton コンポーネントを指定できます。詳細については、「コンポーネントとアセンブリ」を参照してください。
- ソリューション エクスプローラで UserControl1.jsl を右クリックし、[コードの表示] をクリックします。
- class ステートメント
public class UserControl1 を探し、UserControl1 を ValueButton に変更してコンポーネント名を変更します。 - コンストラクタ public UserControl1() を探し、public ValueButton() に変更します。
- class ステートメントで、このコントロールの継承元の型を System.Windows.Forms.UserControl から System.Windows.Forms.Button に変更します。これにより、継承コントロールは Button コントロールのすべての機能を継承できます。
- ソリューション エクスプローラで UserControl1.jsl をクリックし、[プロパティ] ウィンドウで、"ファイル名" プロパティを「ValueButton.jsl」に変更します。
- [ファイル] メニューの [すべてを保存] をクリックしてプロジェクトを保存します。
デザイナは使用できなくなりました。Button コントロールは独自の描画を実行するため、デザイナでは表示を変更できません。ビジュアル表示は、コードで変更しない限り、継承元のクラス (つまり、Button) とまったく同じです。
継承コントロールへのメンバの追加
継承された Windows フォーム コントロールの使用方法の 1 つとして考えられるのは、標準 Windows フォーム コントロールと同じコントロールを作成して、カスタム プロパティを公開することです。このセクションでは、コントロールに ButtonValue という名前のメンバを追加します。
ButtonValue メンバを追加するには
- ソリューション エクスプローラで ValueButton.jsl を右クリックし、ショートカット メニューの [コードの表示] をクリックします。
class ステートメントを探します。始まりの中かっこ ({) の直後に、次のコードを追加します。
// Visual J#
// Creates the private variable that will store the value of your
// member.
private int varValue;
// Declares the methods to access or modify the member.
/** @property */
public int get_ButtonValue()
{
return varValue;
}
/** @property */
public void set_ButtonValue(int value)
{
varValue = value;
} このコードは、ButtonValue メンバを格納および取得するメソッドを設定します。get_ ステートメントは、返される値をプライベート変数 varValue に格納された値に設定します。set_ ステートメントは、キーワード value を使ってプライベート変数の値を設定します。
- [ファイル] メニューの [すべてを保存] をクリックしてプロジェクトを保存します。
コントロールのテスト
コントロールはスタンドアロン プロジェクトではないため、コンテナでホストする必要があります。コントロールをテストするには、コントロールを実行するテスト プロジェクトを指定する必要があります。また、コントロールをビルドしてテスト プロジェクトからもアクセスできるようにする必要があります。このセクションでは、コントロールをビルドして Windows フォームでテストします。
コントロールをビルドするには
テスト プロジェクトを作成するには
- [ファイル] メニューの [プロジェクトの追加] をポイントし、[新しいプロジェクト] をクリックして [新しいプロジェクトの追加] ダイアログ ボックスを開きます。
- [Visual J# プロジェクト] ノードを選択し、[Windows アプリケーション] をクリックします。
- [プロジェクト名] ボックスに「Test」と入力します。
- ソリューション エクスプローラで、テスト プロジェクトの [参照設定] ノードを右クリックし、ショートカット メニューの [参照の追加] をクリックして [参照の追加] ダイアログ ボックスを表示します。
- [プロジェクト] タブをクリックします。
- [ValueButtonLib] プロジェクトをダブルクリックします。プロジェクトが [選択されたコンポーネント] ペインに表示されます。
参照を追加した後、ツールボックスに新しいコントロールを追加します。ツールボックスにコントロールが既に表示されている場合は、次のセクションの手順を省略してください。
- ソリューション エクスプローラで [Test] を右クリックし、ショートカット メニューの [スタートアップ プロジェクトに設定] をクリックします。
コントロールをツールボックスに追加するには
- ツールボックスを右クリックし、ショートカット メニューの [アイテムの追加と削除] をクリックします。
[ツールボックスのカスタマイズ] ダイアログ ボックスが表示されます。
- [.NET Framework コンポーネント] タブをクリックし、[参照] をクリックします。ValueButtonLib\bin\debug フォルダを参照し、ValueButtonLib.dll を選択します。
[ツールボックスのカスタマイズ] ダイアログ ボックスのコンポーネント一覧に [ValueButton] が表示されます。
- [ツールボックスのカスタマイズ] ダイアログ ボックスで、[ValueButton] の横のボックスをオンにして、ウィンドウを閉じます。
選択したツールボックスのタブに ValueButton が追加されます。
フォームにコントロールを追加するには
- ソリューション エクスプローラで Form1.jsl を右クリックし、ショートカット メニューの [デザイナの表示] をクリックします。
- ツールボックスで、[ValueButton] と示されたアイコンに到達するまで下方にスクロールします。このアイコンをダブルクリックします。
ValueButton のインスタンスがフォームに表示されます。
- [ValueButton] を右クリックし、ショートカット メニューの [プロパティ] をクリックします。
- [プロパティ] ウィンドウで、このコントロールのプロパティを調べます。これらのプロパティは、標準ボタンにより公開されるプロパティと同じです。
InitializeComponent の呼び出しの後、public Form1 コンストラクタに次のコードを追加して、ButtonValue メンバを 5 に設定します。
// Visual J#
valueButton1.set_ButtonValue(5); // Sets ButtonValue member of inherited button to 5.
- ツールボックスの [Windows フォーム] タブで、[Label] をダブルクリックしてフォームに Label コントロールを追加します。
- ラベルをフォームの中央に配置し直します。
- [valueButton1] をダブルクリックします。
コード エディタに valueButton1_Click イベントが表示されます。
- 次のコード行を追加します。
// Visual J#
label1.set_Text("" + valueButton1.get_ButtonValue()); - ソリューション エクスプローラで [Test] を右クリックし、ショートカット メニューの [スタートアップ プロジェクトに設定] をクリックします。
- [デバッグ] メニューの [開始] をクリックします。
Form1 が表示されます。
- [valueButton1] をクリックします。
Label1 に数字 "5" が表示されます。これにより、valueButton1_Click メソッドによって継承コントロールの ButtonValue メンバが Label1 に渡されたことが証明されます。これで、作成した ValueButton コントロールが標準 Windows フォーム ボタンのすべての機能を継承し、それに加えてカスタム メンバを公開することがわかります。
参照
コンポーネントによるプログラミング | チュートリアル : Visual J# でのユーザー コントロールの作成 | コンポーネントおよびコントロール作成のチュートリアル