マイクロソフト株式会社 デベロッパーマーケティング本部
デベロッパーエバンジェリスト 佐藤 直樹

最終更新日 2004 年 6 月 16 日

このコンテンツのポイント
  • テンプレートからのユーザーコントロール作成
  • プロパティの実装方法
  • コントロールのテスト方法
今回紹介するコード
Visual Basic
Private _textMessage As String = "私のテスト文字列"
<DefaultValue("私のテスト文字列")> _
Public Property TextMessage() As String
    Get
        Return _textMessage
    End Get
    Set(ByVal Value As String)
        _textMessage = Value
    End Set
End Property
 

 

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

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


  

はじめに

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

 

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

Visual Studio .NET 2003 を起動して、新規にプロジェクトを作成します。ここでは、Visual C# .NET を選択し、"Windows コントロール ライブラリー" テンプレートを選択します。[プロジェクト名] テキストボックスに コントロール名称を入力したら [OK] ボタンをクリックします。

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

これで、Windows フォーム向けのユーザーコントロール開発の準備が完了しました。(図 2)
デザイン画面は、Windows フォームと同様に、ドラッグアンドドロップでコントロールの追加が可能です。タイトルバーがないことから、Windows フォームとは違う点があることがわかります。

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

画面左側 (*1) に表示されている "ツール ボックス" から [Windows フォーム] を選択し、Button コントロールをフォームへドロップします。(図 3)

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

コントロール配置後、プロパティのコードを記述します。

 

Visual Basic
Private _textMessage As String = "私のテスト文字列"
<DefaultValue("私のテスト文字列")> _
Public Property TextMessage() As String
    Get
        Return _textMessage
    End Get
    Set(ByVal Value As String)
        _textMessage = Value
    End Set
End Property
 

プロパティは変数の拡張です。変数とプロパティはどちらも、関連付けられた型を持つ名前付きのメンバであり、これらにアクセスするための構文は同じです。 ただし、変数とは異なりプロパティには "アクセサ" があります。このアクセサによって、値の読み取りまたは書き込みを実行するためのステートメントを指定します。(図 4)

図 4. フィールドとプロパティのコード

最後にボタンのクリックイベントへのコードを記述し、[ビルド] メニューから [ソリューションのビルド] を実行します。

 

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button1.Click
    MessageBox.Show(Me.textMessage)
End Sub
 

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

コントロールはできましたが、このままではコントロールの動作確認ができません。そこでコントロールをホストする Windows フォームアプリケーションをプロジェクトへ追加します。[ファイル] メニューより [プロジェクトの追加 - 新しいプロジェクト] から操作し、ホストとなる Windows フォームアプリケーションを追加します。コントロールは DLL であり実行可能ファイルではないため、実行可能ファイルである追加したアプリケーションをスタートアッププロジェクトとして設定します。スタートアッププロジェクトにするには、 [プロジェクト] メニューより [スタートアップ プロジェクトの設定] より表示されるソリューションのプロパティページにて「シングル スタートアップ プロジェクト」を変更します。(図 5)

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

続いて、コントロールを標準の Button コントロールのようにツールボックスへ追加し、ドラッグ & ドロップの操作でフォームに配置できるようにします。ツールボックス上で右ボタンクリックによりコンテキストメニューを表示し、[アイテムの追加と削除] を選択します。[参照] ボタンをクリックし、今回作成したコントロールの DLL (アセンブリ) を [開く] ダイアログより選択します。
ツールボックスへの組み込みが終わったところで、コントロールをホストアプリケーションのフォームへ配置し (図 6)、他のコントロールの配置やイベントハンドラーの記述を行います。(図 7)

図 6. Windows フォームアプリケーションへのコントロールの配置

図 7. コードの記述

動作と解説

イベントのコードの記述が完了したら、実行してみましょう。
アプリケーションを実行させるには [F5] キーを押すか、[デバッグ] メニューから [開始] をクリックします。すると Windows フォームアプリケーションが起動します。(図 8) コンポーネント側のボタンをクリックすると、メッセージボックスに値が表示されることが確認できます。

図 8. 起動した Windows フォームアプリケーション

ところで、今回コンポーネント側のコードをよく見ると、プロパティの直前にかっこ <> でくくられた一行があります。これを属性といいます。 ここで使用している属性は DefaultValueAttribute クラスと呼び、プロパティの規定値を指定します。

 

Visual Basic
<DefaultValue("私のテスト文字列")> _
Public Property TextMessage() As String
 

この属性は、InitializeComponent メソッド内の Visual Studio .NET 2003 が自動生成するコードに影響を及ぼします。Visual Studio .NET 2003 上でフォームに配置されたコントロールやコンポーネントのプロパティを変更すると、このメソッド内にソースコードとしてシリアライズされます。プロパティ に対してこの属性が適用されており、かつプロパティ値と同一の値の場合、ホスト側のプロパティ設定のコードは出力されません。(図 9) アプリケーションの実行時のプロパティ設定は少なからずコストが発生するため、属性値と同一の場合はコードを生成しないようにコントロールされているから です。また、[リセット] メニュー (図 10) によりプロパティを規定値に戻す場合も利用されます。

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

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

おわりに

このように、既存の複数のコントロールを組み合わせて、さまざまなコントロールが配置されている複合コントロールと呼ばれるコントロールを作成することが可能となります。また、コントロールの作成には、既存のコントロールから拡張する方法もあります。
今回のコントロールは System.Windows.Forms.UserControl から派生させたクラスに対してコントロールを貼り付ける形態でしたが、GDI+ グラフィック ライブラリを利用してコントロールのビジュアル表現を高めることも視野に入れ、さまざまなコントロール作成にチャレンジしてください。

 

注釈

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

 


 

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

ページのトップへ