全EXITイベントの取得

解決


hide  2006-08-28 14:54:10  No: 23023  IP: 192.*.*.*

こんにちは。教えていただきたいことがあります。

フォーム上にある全てのエディットのExitイベントを
取得する方法はありますか?

よくわからないかもしれませんが、
たとえば、フォーム上にエディットボックスが100個以上あるとします。
で、そのそれぞれのエディットのOnExitイベントで
共通の処理をしたいとします。

普通でしたら、それぞれのエディットのOnExitイベントに
同じ処理を書くのでしょうが、数が多いと大変です。

ですので、一つのメソッドを定義するだけで
そのメソッドにフォーム上のすべてのエディットのExitイベント
が入ってくるようにしたいのです。

知恵を貸してください。宜しくお願いします。

ちなみにDelphi2005です。

編集 削除
もにゃ  2006-08-28 14:59:47  No: 23024  IP: 192.*.*.*

OnExitに共通のイベントを参照させるだけです。
Edit1.OnExit := EditExit;
Edit2.OnExit := EditExit;
みたく。
FindComponentを使えばForループで2-3行で書けますよ

編集 削除
ん?  2006-08-28 15:13:25  No: 23025  IP: 192.*.*.*

コンポーネント名が、EditXXのような、自動で作成されるものではない場合
Components、ComponentCountで全て列挙したほうがいいでしょう。

仕様例は、こんな感じで
https://www.petitmonte.com/bbs/answers?question_id=3983

> function TForm1.GetScoreBox( aTag: integer): TScoreBoxMemo;


例の変数を使うと、こんなトコですか?
if tmp is TEdit then TEdit(tmp).OnExit := EditExit;

編集 削除
Syake  2006-08-28 16:05:35  No: 23026  IP: 192.*.*.*

>フォーム上にある全てのエディットのExitイベントを
>取得する方法はありますか?
あります。
http://homepage2.nifty.com/Mr_XRAY/Halbow/index.html
に詳しく出ていますので参考にしてください。

内容から察して、このような回答でよろしいのでしょうか?
失礼があったらご容赦くださいm(__)m
>普通でしたら、それぞれのエディットのOnExitイベントに
>同じ処理を書くのでしょうが、数が多いと大変です。
それは、一般的には間違っています。
オブジェクトインスペクタで例えばEdit1のOnExitをダブルクリックすると
Edit1Exitが設定されると思います。
(ここで適当な名前に変えても良いでしょう。)
後は、他の各EditのOnExitに先程設定したイベント処理を選択して設定する
だけです。
これで、イベントの共有化!?ができます。

共通の処理でなくとも、まとめて記述することもあります。
書き方は変かもしれませんが、Sender変数を判定することで、
どのEditから発生したイベントなのかは十分判断できます。

編集 削除
hide  2006-08-28 16:23:57  No: 23027  IP: 192.*.*.*

もにゃさん、ん?さん、Syakeさん
どうもありがとうございました。

おかげで解決したと同時に、勉強になりました。

編集 削除