こんにちは。教えていただきたいことがあります。
フォーム上にある全てのエディットのExitイベントを
取得する方法はありますか?
よくわからないかもしれませんが、
たとえば、フォーム上にエディットボックスが100個以上あるとします。
で、そのそれぞれのエディットのOnExitイベントで
共通の処理をしたいとします。
普通でしたら、それぞれのエディットのOnExitイベントに
同じ処理を書くのでしょうが、数が多いと大変です。
ですので、一つのメソッドを定義するだけで
そのメソッドにフォーム上のすべてのエディットのExitイベント
が入ってくるようにしたいのです。
知恵を貸してください。宜しくお願いします。
ちなみにDelphi2005です。
OnExitに共通のイベントを参照させるだけです。
Edit1.OnExit := EditExit;
Edit2.OnExit := EditExit;
みたく。
FindComponentを使えばForループで2-3行で書けますよ
コンポーネント名が、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;
>フォーム上にある全てのエディットのExitイベントを
>取得する方法はありますか?
あります。
http://homepage2.nifty.com/Mr_XRAY/Halbow/index.html
に詳しく出ていますので参考にしてください。
内容から察して、このような回答でよろしいのでしょうか?
失礼があったらご容赦くださいm(__)m
>普通でしたら、それぞれのエディットのOnExitイベントに
>同じ処理を書くのでしょうが、数が多いと大変です。
それは、一般的には間違っています。
オブジェクトインスペクタで例えばEdit1のOnExitをダブルクリックすると
Edit1Exitが設定されると思います。
(ここで適当な名前に変えても良いでしょう。)
後は、他の各EditのOnExitに先程設定したイベント処理を選択して設定する
だけです。
これで、イベントの共有化!?ができます。
共通の処理でなくとも、まとめて記述することもあります。
書き方は変かもしれませんが、Sender変数を判定することで、
どのEditから発生したイベントなのかは十分判断できます。
もにゃさん、ん?さん、Syakeさん
どうもありがとうございました。
おかげで解決したと同時に、勉強になりました。
ツイート | ![]() |