質問者
ユーザーコントロールにイベントを追加したら、呼び出し元のフォームに、必ずそのイベントを追加しないといけないのですか?

質問
-
ユーザーコントロールにテキストボックスがあります。
その中にKeyDownイベントを追加しました。public event System.EventHandler usKeyDown1;
private void txtValue1_KeyDown(object sender, KeyEventArgs e)
{
this.usKeyDown1(sender, e);
}次に呼び出し元フォームに
下記の内容を追加しました。this.usItem1.usKeyDown1 += new EventHandler(usItem1_usKeyDown1);
private void usItem1_usKeyDown1(object sender, EventArgs e)
{
//処理
}これで実行すると、ユーザーコントロールのテキストボックスに何か入力した場合、
上記の「処理」部分に飛び、ちゃんと動くのですが、
上記を無くしてしまうと、処理が止まってしまいます。ユーザーコントロールをいくつも使うため
そのたびに上記の内容を書くのでは、とても不便なのですが
何かいい方法は無いのでしょうか?
すべての返信
-
ユーザーコントロール
private void txtValue1_KeyDown(object sender, KeyEventArgs e)
{
txtValue1KeyDown(sender, e);
this.usKeyDown1(sender, e);
}
protected virtual void txtValue1KeyDown(object sender, KeyEventArgs e)
{
//デフォルト処理
}
呼び出し元フォーム
デフォルト以外の追加処理が必要なら
this.usItem1.usKeyDown1 += new EventHandler(usItem1_usKeyDown1);
private void usItem1_usKeyDown1(object sender, EventArgs e)
{
//追加処理
}
デフォルト処理を書き換える必要があればユーザーコントロールを継承したユーザーコントロールを作って
protected Override void txtValue1KeyDown(object sender, KeyEventArgs e)
{
//置き換える処理
} -
こういう場合って、デフォルトのオーバーライド可能のメソッドをeventとして登録しておくのはダメなんですかね?
public Hoge() // コンストラクタ { this.usKeyDown1 += new EventHandler(txtValue1_KeyDown); } private void txtValue1_KeyDown(object sender, KeyEventArgs e) { //txtValue1KeyDown(sender, e); this.usKeyDown1(sender, e); } protected virtual void txtValue1KeyDown(object sender, KeyEventArgs e) { //デフォルト処理 }