- PR -

イベントのフック

1
投稿者投稿内容
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-05-14 12:58
C#でこんなことは可能でしょうか?
(仕様)
1.テキストボックスを使って1以上4以下の数字を入力する制限をしたい
2.Validatingイベントでチェックする。
3.しかし、複数のフォームで使うロジックなので、フォームごとにイチイチ
  記述したくない。
4.なので、テキストボックスを継承して新しいクラス(コントロール)を作る
  public class newTextBox : System.Windows.Forms.TextBox
5.このnewTextBoxクラスの記述の中にチェックロジックを書きたい
6.フォームで使用する時は、新しく作ったコントロールを貼り付けるだけで
  チェックロジックが動作するようにしたい。

newTextBoxクラスの記述の中でValidatingイベントをフックするような
イメージです。特に仕様の6番目は重要視しています。
上記のようなことは可能なのでしょうか?
可能であればどのような記述をすればよろしいでしょうか?

よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-14 13:30
引用:

パンダさんの書き込み (2004-05-14 12:58) より:

上記のようなことは可能なのでしょうか?


可能です。

引用:

可能であればどのような記述をすればよろしいでしょうか?


仕様通り、順位記述すればいいです。


ん〜、いったい、何を困っているのか、それがわからなくて困ってしまった。


未検証、直書き 〜は省略記号
class MyTextBox : System.Windows.Forms.TextBox
{

protected void OnValidating(〜) // overrideがいるかも
{
// 自分の検証用処理
base.OnValidating(〜);
}
}

イベントを発生させる為に、「On〜」メソッドを呼ぶことが決められています(MSDN)。ですから、ベースクラスでイベントが発生するときには必ずOn〜メソッドが呼ばれます。それであるなら、OnValidatingメソッドで先にチェックしてから、それを使う開発者にイベントを通知してやればよい、というわけです。
パンダ
ベテラン
会議室デビュー日: 2004/03/24
投稿数: 59
投稿日時: 2004-05-14 14:15
はい。私もそう思ったのですが、「オーバーライドする適切なメソッドが
見つかりませんでした」のメッセージでエラーになっていたのです。

しかし、今が気が付きました。
OnValidatingメソッドの引数が間違っていました。
それが原因でした。
お騒がせしました。
1

スキルアップ/キャリアアップ(JOB@IT)