全EXITイベントの取得

解決


hide  2006-08-28 23:54:10  No: 23023

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

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

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

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

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

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

ちなみにDelphi2005です。


もにゃ  2006-08-28 23:59:47  No: 23024

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


ん?  2006-08-29 00:13:25  No: 23025

コンポーネント名が、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-29 01:05:35  No: 23026

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

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

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


hide  2006-08-29 01:23:57  No: 23027

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加