今回は、前回作成したコントロールに公開イベントを追加します。
作成したコントロールにはチェックボックスが付いています。このチェックボックスのチェック状態が変更されたときに発生するCheckedChangedイベントを追加してみましょう。
まずはイベントを宣言します。
public event EventHandler<EventArgs> CheckedChanged;
次に、公開イベントの追加を下記のように行います。
ここで[Browsable(true)]とすることで、プロパティウィンドウの雷マークをクリックしたときのイベント一覧に表示されるようになります。また、[Description()]を使用することで、イベントの説明を表示させることができます。
/// <summary> /// チェック状態が変更された場合に発生します /// </summary> /// <param name="e"></param> [Browsable(true)] [Description("チェック状態が変更されるときに発生するイベントです")] protected virtual void OnCheckedChanged(EventArgs e) { EventHandler<EventArgs> eventHandler = CheckedChanged; if (eventHandler != null) { eventHandler(this, e); } }
最後に、イベントを発生させる方法について押さえておきましょう。
作成したいイベントはいつ発生させたらよいでしょうか?ここでは当然、チェック状態が変わったときですよね。
ということで、Checkedプロパティで行うこととしました。set {~}の中を見ていただきたいのですが、OnCheckedChangedを呼んで、イベントを発生させています。(ここはチェック状態セットされるときに実行される場所ですよね。なので、ここでイベントを発生させているというわけです)
[Browsable(true)] [Description("テキスト入力エリアの表示/非表示を切り替えます。")] [Category("動作")] public bool Checked { get { return checkBox1.Checked; } set { checkBox1.Checked = value; // チェック状態が変更されたのでCheckedChangedイベントを発生させる OnCheckedChanged(EventArgs.Empty); } }
ユーザーコントロールは特別難しいモノではありません。アイデア次第では、非常に便利なコントロールを作成することが可能なので、是非チャレンジしてみてください。
Please follow and like us:
コメント
イベントの宣言のコード、表示がおかしいみたいです。
ご報告くださりありがとうございます。
修正いたしました。
今後ともよろよろしくお願いいたします。
修正ありがとうございました。
2点、疑問があります。
1.
[Browsable(true)]
[Description(“チェック状態が変更されるときに発生するイベントです”)]
は関数 (void OnCheckedChanged(EventArgs e))ではなくて、このイベントの宣言の方に付けるのではないかと思います。
実際、イベントの宣言の方につけないとデザイナーに説明文が現れません。
2.
イベントの発生の仕方はあってますでしょうか?
こちらでは CheckedChanged がullでイベント発生しないようです。
(Formで受け取れません。
Formにボタンを追加して
private void button1_Click(object sender, EventArgs e)
{
checkTextBox1.Checked = true;
}
としてみました)
私の勘違いでしたらすみません。