Visual J# には、継承を使って強力なカスタム コントロールを作成する機能が用意されています。継承を使用すると、標準の Windows フォーム コントロールの固有の機能をすべて保持しながら、カスタム機能も組み込んだコントロールを作成できます。このチュートリアルでは、ValueButton という名前の簡単な継承コントロールを作成します。このボタンは、標準 Windows フォーム ボタンの機能を継承し、ButtonValue という名前のカスタム メンバを公開します。
メモ : |
|---|
| 使用している設定またはエディションによっては、表示されるダイアログ ボックスやメニュー コマンドがヘルプに記載されている内容と異なる場合があります。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。 |
新しいプロジェクトを作成するときは、名前を指定することによって、ルート パッケージ、アセンブリ名、およびプロジェクト名が設定され、既定のコンポーネントが適切なパッケージに含まれるようになります。
ValueButtonLib コントロール ライブラリおよび ValueButton コントロールを作成するには
-
[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックして [新しいプロジェクト] ダイアログ ボックスを開きます。
-
[Visual J# プロジェクト] ボックスの一覧の [Windows コントロール ライブラリ] プロジェクト テンプレートをクリックし、[プロジェクト名] ボックスに「ValueButtonLib」と入力します。
-
[OK] をクリックします。
既定では、プロジェクト名の ValueButtonLib がルート パッケージにも割り当てられます。ルート パッケージは、アセンブリ内のコンポーネントの名前を限定するために使用されます。たとえば、ValueButton という名前のコンポーネントが 2 つのアセンブリに含まれる場合は、ValueButtonLib.ValueButton という形で ValueButton を指定します。
-
ソリューション エクスプローラで、UserControl1.jsl を右クリックし、ショートカット メニューの [名前の変更] をクリックします。ファイル名を ValueButton.jsl に変更します。
-
ソリューション エクスプローラで [ValueButton.jsl] を右クリックし、[コードの表示] をクリックします。
-
class ステートメント、public class ValueButton を検索し、このコントロールが継承した型を System.Windows.Forms.UserControl から System.Windows.Forms.Button に変更します。これにより、継承したコントロールは、Button コントロールのすべての機能を継承できます。
-
[コンポーネント デザイナで生成されたコード] を展開し、InitializeComponent メソッドを検索し、AutoScaleMode プロパティを割り当てた行を削除します。
this.set_AutoScaleMode(System.Windows.Forms.AutoScaleMode.Font);
このプロパティは、Button コントロール内には存在しません。
-
[ファイル] メニューの [すべてを保存] をクリックして、プロジェクトを保存します。
ビジュアル デザイナが使用できなくなります。Button コントロールは独自の描画を実行するため、デザイナでは表示を変更できません。ビジュアル表示は、コードで変更しない限り、継承元のクラス (Button) とまったく同じです。
メモ : |
|---|
| UI 要素のないコンポーネントをデザイン サーフェイスに追加することはできます。 |
継承された 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」と入力し、[OK] をクリックします。
-
ソリューション エクスプローラで、テスト プロジェクトの [参照設定] ノードを右クリックし、ショートカット メニューの [参照の追加] をクリックして [参照の追加] ダイアログ ボックスを表示します。
-
[プロジェクト] タブをクリックします。
-
ValueButtonLib プロジェクトをダブルクリックして、テスト プロジェクトに参照を追加します。
フォームにコントロールを追加するには
-
ソリューション エクスプローラで Form1.jsl を右クリックし、ショートカット メニューの [デザイナの表示] をクリックします。
-
ツールボックスで、[ValueButton] アイコンをダブルクリックします。
ValueButton のインスタンスがフォームに表示されます。
-
ValueButton を右クリックし、ショートカット メニューの [プロパティ] をクリックします。
このコントロールのプロパティは [プロパティ] ウィンドウで確認できます。これらのプロパティは、標準ボタンにより公開されるプロパティと同じです。
-
ButtonValue プロパティを 5 に設定します。
-
ツールボックスの [コモン コントロール] タブで、[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# でのユーザー コントロールの作成
その他の技術情報
コンポーネントによるプログラミング
コンポーネントおよびコントロール作成のチュートリアル