最終更新日 2007 年 4 月 16 日

このコンテンツのポイント

  • テンプレートからのユーザー コントロール作成
  • プロパティの実装方法
  • コントロールのテスト方法

今回紹介するコード

C#
private string textMessage = "私のテスト文字列";
[DefaultValue("私のテスト文字列")]
public string TextMessage
{
	set{
		this.textMessage = value; 
	}
	get{
		return this.textMessage;
	}
}
 

今回のシステム要件

 

目次

はじめに
Windows フォーム向けユーザー コントロールの開発
コントロールをホストするアプリケーションの追加
動作と解説
おわりに
注釈

 

Visual Basic の内容はこちらに掲載しています。
10 行でズバリ!! Windows フォーム向けユーザー コントロールの作成 (VB)

はじめに

Windows フォームのコントロールは、ユーザー インターフェイスの機能をカプセル化した再利用可能なコンポーネントです。標準で多くのコントロールが用意されていますが、独自にコントロールを開発することも可能です。ここでは、独自のコントロールであるユーザー コントロールの作成と、それを Windows フォームで利用する方法について解説します。

Windows フォーム向けユーザー コントロールの開発

Visual Studio 2005 を起動して、新規にプロジェクトを作成します ([ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします)。

ここでは、プロジェクトの種類ペインで、[Visual C#] を選択し、テンプレート ペインでは [Windows コントロール ライブラリ]を選択します。[プロジェクト名] ボックスに適当な名前を入力し、[場所] ボックスに適当なパスを指定したら、[OK] ボタンをクリックします。

図 1. ユーザー コントロールのためのプロジェクトを新規に作成する

これで、Windows フォーム向けのユーザー コントロール開発の準備が完了しました。ユーザー コントロールのデザインを行うためのデザイナが開いています。(図 2)

このデザイナは、 Windows フォーム デザイナと同様に、ツールボックスからコントロールをドラッグ アンド ドロップして、ユーザー コントロールへ追加することができます。このデザイナには、タイトルバーがないことから、通常の Windows フォームとは違うことがわかります。

図 2. ユーザー コントロール作成のためのデザイン画面

画面左側 (*1) の[ツール ボックス] タブ上にマウスポインタを移動して、[ツール ボックス] を表示させて、 [すべての Windows フォーム] タブを展開し、Button コントロールをフォームへドロップします。(図 3) ツールボックスが自動的に表示され、もし、その背後にユーザー コントロールが隠れてしまった場合は、一旦、ツールボックスで Button コントロールをクリックした後、デザイナの余白をクリックしてみてください。再び、ツールボックスが隠れ、その後、デザイナ上で適当な位置にドラッグして範囲指定することで、Button を貼り付けることができます。

図 3. Button コントロールが配置されたユーザー コントロール

次に、コード エディタに切り替えて、プロパティを実装するための以下のコードを記述します。(コード エディタに切れかえるには、デザイナの余白を右クリックして、[コードの表示] メニューをクリックします。)

C#
private string textMessage = "私のテスト文字列";
[DefaultValue("私のテスト文字列")]
public string TextMessage
{
	set{
		this.textMessage = value; 
	}
	get{
		return this.textMessage;
	}
}
 

これは、TextMessage という名前のプロパティを実装するコードです。このユーザー コントロールを利用する側から見ると、TextMessage プロパティは、このコントロールが持つ変数のように見えます。実際は、「アクセサ」と呼ばれる 2 つのメソッドから構成されています。アクセサは、プロパティに対して、値の設定や参照の際に呼び出される実質的なメソッドです。実際の値は、この例では、変数 textMessage に保存されます。コード入力が完了すると、図 4 のようになります。

図 4. プロパティの実装コード

最後に、ボタンの Click イベントに対応するコードを記述します。(コード エディタ上で余白を右クリックし、 [デザイナの表示] メニューをクリックしてデザイナに切り替えて、デザイナ上の Button1 をダブルクリックすると、以下のコードの雛形が作成されます。) コード入力が済んだら、 [ビルド] メニューの [ソリューションのビルド] をクリックして、アプリケーションをビルドします。

C#
private void button1_Click(object sender, System.EventArgs e)
{
    MessageBox.Show ( this.textMessage );
 }
 

ユーザー コントロールをホストするアプリケーションの追加

ユーザー コントロールはできましたが、このままではユーザー コントロールの動作確認ができません。そこでユーザー コントロールをホストする Windows フォーム アプリケーションをプロジェクトへ追加します。

まず、[ファイル] メニューの [追加] をポイントし、[新しいプロジェクト] をクリックして [新しいプロジェクトの追加] ダイアログボックスを表示させ、ホストとなる Windows フォーム アプリケーションを、プロジェクト テンプレートとして選択して追加します。(この例では、プロジェクト名は 「HostApp」)

また、ユーザー コントロールは DLL であり実行可能ファイルではないため、実行可能ファイルである追加した Windows アプリケーションを、スタートアップ プロジェクトとして設定します。スタートアップ プロジェクトにするには、まず、画面右上のソリューション エクスプローラーのツリー上で、ルートノードの [ソリューション 'MyWinControlCS'] を選択します。次に、メニュー バーにある [プロジェクト] メニューの [スタートアップ プロジェクトの設定] をクリックし、表示されるソリューションのプロパティページ上で、「シングル スタートアップ プロジェクト」 を 「HostApp」に変更します。(図 5)

図 5. ソリューションのプロパティページ

ビルドすることによって、ユーザーコントロールがツールボックスに組み込まれます。ツールボックス上にある、このユーザー コントロール 「UserControl1」 を、後から追加した Windows アプリケーションのフォーム 「Form1」 へ、ドラッグ アンド ドロップし、さらに図 6 のように、TextBox コントロールと Button コントロールを配置します。

また、図 7 のように、Button コントロールの Click イベント ハンドラを追加します。 このイベント ハンドラでは、ユーザー コントロールの TextMessage プロパティの値を、Form1 上の TextBox1 のテキスト表示部分に設定しています。

図 6. Windows フォーム アプリケーションへユーザー コントロールを配置する

図 7. コードの記述

動作と解説

ここで、実行してみましょう。アプリケーションを実行させるには [Ctrl+F5] キーを押すか、[デバッグ] メニューの [デバッグなしで開始] をクリックします。すると Windows フォーム アプリケーションが起動します。(図 8) ユーザー コントロール側のボタンをクリックすると、メッセージ ボックスが表示され、フォーム上のボタンをクリックすると、テキストボックスに「私のテスト文字列」という値が表示されることが確認できます。

図 8. Windows フォーム アプリケーションが起動する

ところで、今回ユーザー コントロール側のコードをよく見ると、プロパティの直前にかっこ [] でくくられた一行があります。これを属性といいます。ここで使用している DefaultValue という名前の属性は、プロパティの既定値を指定しています。

C#
[DefaultValue("私のテスト文字列")]
public string TextMessage
 

この属性は、 InitializeComponent メソッド内の Visual Studio 2005 が自動生成するコードに影響を及ぼします。本来、フォーム デザイナ上で編集しているとき、プロパティ ウィンドウからコントロールのプロパティの値を設定すると、そのプロパティに値を設定するコードが IntializeComponent メソッドの中に自動生成されます。しかし、プロパティ ウィンドウから指定した値が、この属性の値と一致するときは、コードを生成しません。(図 9) アプリケーションの実行時にプロパティを設定することは、少なからずコストが発生するため、属性値と同一の場合はコードを生成しないように制御されている のです。また、[リセット] メニュー (図 10) によりプロパティを規定値に戻す場合も利用されます。

図 9. InitializeComponent メソッド内のプロパティ設定のコード

図 10. プロパティブラウザに表示されたリセットメニュー

おわりに

このように、Visual Studio 2005 のビジュアルな環境で、限られたコードを記述するだけで、独自のコントロールを簡単に構築することができます。また、作成したコントロールのテストも、同じ環境で容易に行うことができることが分かったかと思います。

注釈

*1 : 画面上の位置について
各サブウィンドウの位置は、Visual Studio 2005 のセットアップ終了後に標準的に配置されている場所を示しています。これらのウィンドウやツールボックスは、ドラッグ アンド ドロップによって画面上の任意の位置に配置して、開発をされる皆さんが利用しやすい場所へ移動することができます。もし画面上のどこにも見当たらないときは、[表示] メニューをクリックし、該当ウィンドウのメニューをクリックするか、同じく [表示] メニューをクリックし、[その他のウィンドウ] サブメニューから選択することで再度画面上に表示させることができます。  


Code Recipe .NET Framework デベロッパー センター

ページのトップへ