.NET ROOM.NET ROOMトップへCOMRADE総合トップへ
「2:イベントハンドラの登録と独自イベントの作成」へ

自作イベントの使用法

 続いて、作成したExtendedNumericUpDown型のコントロールをフォームに配置してみましょう。

 前回は、コントロールとフォームを別プロジェクトで別アセンブリにして、テストしました。
今回は、同じプロジェクトで同一アセンブリにして、配置してみます。
この場合、実際にコントロールを出荷するときには、テスト用のフォームを外してコンパイルし直す必要があります。

 また、コントロールとテスト用のフォームが同じプロジェクトにある場合は、
フォームにツールボックスからコントロールを貼ることはできません。
そのため、コードで初期化などをする必要があるのですが、
NumericUpDownの初期化は複雑なので、注意が必要です。
このような場合、ひとまず基底クラスのNumericUpDownをフォームに配置し、
自動生成されたコードを修正することで、初期化に手を煩わすことがなくなります。
ただし、コントロールとフォームが別プロジェクトになっている場合は、前回説明した、
ツールボックスに追加する方法をお勧めします。

 では、コードエディタで、自動生成されたコードを修正してみましょう。

 修正する箇所は、以下の部分です。

   private NumericUpDown numericUpDown1;
   (略)
   this.numericUpDown1 = new NumericUpDown();

 上記部分を以下のように修正します。

   private ExtendedNumericUpDown numericUpDown1;
   (略)
   this.numericUpDown1 = new ExtendedNumericUpDown();

 再びデザイン画面に戻り、コントロールを選択して、右クリックすると表示されるショートカットメニューから
[プロパティ]を選択し、プロパティウィンドウを表示します。
プロパティウィンドウに、先ほど指定したクラス名が表示されていることを確認します(図5)。

図5:NumericUpDownクラスの派生クラス(ExtendedNumericUpDownクラス)



 次に新しく追加したイベントに対して、イベントハンドラを登録してみましょう。
前述のKeyPressイベントなど標準のイベントのイベントハンドラの登録と同様、
プロパティウィンドウでイベント一覧アイコンをクリックして、イベントのプロパティを表示します。
先ほど作成した独自のイベントが、「その他」カテゴリに追加されているので(図6)、
ダブルクリックし、イベントハンドラの雛形を自動生成します。

図6:UpDownイベント(独自イベント)



 今回はテストなのでメソッドの中身は、イベントハンドラに到達していることを確認する
単純なコードにします(リスト4)。
Up/Downボタンが押されたときに、その由を示すメッセージボックスを表示するだけのコードです。

リスト4:UpDownイベントのハンドラ
private void numericUpDown1_UpDown(object sender, UpDownEventArgs e) {
 string msg = (e.Up) ? "Up Button Pressed." : "Down Button Pressed.";
 MessageBox.Show(msg);
}


 完成したら、[F5]キーを押してデバッグを開始し、イベントが有効に働いているかどうか確認してみてください。

カスタムイベントに情報を付加する


 先ほど、自作したイベントが「その他」カテゴリに入っていると説明しましたが、
イベントが表示されるカテゴリを変更することも可能です。
また、標準のイベントでは、イベントの内容説明がプロパティウィンドウ下部に表示されます。

  せっかくカスタムコントロールを作ったので、独自イベントにも、カテゴリ名と説明を追加してみましょう。
情報の付加に関しては、CategoryAttributeと、DescriptionAttributeを使用します。
実際に、CategoryAttributeとDescriptionAttributeを、UpDownイベントに付加したコードがリスト5です。

リスト5:カテゴリ情報と、説明を付加したイベント
[Category("Action")]
[Description("Up/Downボタンが押されたときに発生します。")]
public event UpDownEventHandler UpDown;


 CategoryAttributeのカテゴリは、自由に作ることも可能ですが、混乱を避けるために、
なるべくデフォルトのカテゴリを使用したほうがいいでしょう。
定義されているカテゴリの一覧を表1に示します。

表1:カテゴリとその意味
カテゴリ 説明
Action 実行できるアクションに関するプロパティ
Appearance エンティティの外観に影響するプロパティ
Behavior エンティティの動作に影響するプロパティ
Data データに関するプロパティ
Default カテゴリを持たないプロパティは、既定のカテゴリに属するプロパティとして分類される
Design デザイン時だけ使用できるプロパティ
DragDrop ドラッグ&ドロップ操作に関するプロパティ
Focus フォーカスに関するプロパティ
Format 書式に影響するプロパティ
Key キーボードに影響するプロパティ
Layout レイアウトに関するプロパティ
Mouse マウスに関するプロパティ
WindowStyle トップレベルフォームのウィンドウスタイルに影響するプロパティ


 Attributeを付加したら、一旦コンパイルし、再びプロパティウィンドウから、イベントを表示してみます。
図6と比較すると、カテゴリが変更され、説明が追加されていることがわかります(図7)。

図7:変更されたカテゴリと、追加された説明


ページトップへ


最後に

 今回は、イベントハンドラの登録方法と、独自のイベントの作成方法について説明しました。
解説に使用したNumericUpDownのように、欲しいイベントがみつからない標準コントロールは結構あります。
自分の欲しいイベントを追加することができれば、標準コントロールの利用に幅が出ます。
かゆいところに手の届く自分専用のコントロールを作ってみてはいかがでしょうか?


前へ | ページトップへ | 次へ