TEditを複数配置し、それぞれのOnExitイベントでエラーチェックをする場合、
同じチェック内容であればイベント処理をまとめることができます。
TEditごとに同じイベント処理を作成しなくても、ひとつのイベント処理を作れば、
他のTEditからも共通で利用することができます。
今回のTipsでは、複数のコンポーネントからひとつのイベントハンドラを使用する方法をご紹介致します。
例えば、TEditで文字数をチェックする処理をOnExitイベントで実行するには以下のように記述します。
// 例) TEditのOnExitイベント時に文字数のチェックをする
procedure TForm1.EditExit(Sender: TObject);
begin
// 入力された文字数をチェックする
if Length(TEdit(Sender).Text) >= 5 then
begin
// 5文字以上入力されている場合にはメッセージを表示
ShowMessage('5文字以上入力されています');
// 対象のコンポーネントにフォーカスを設定します
TEdit(Sender).SetFocus;
end;
end;
ここでのポイントは、イベントハンドラの引数Senderを利用することです。
Senderはイベント発生元のコンポーネントが設定されていますので、
Edit1を抜けたとき(OnExit)であればEdit1が、Edit2であればEdit2を指します。
なおSenderからコンポーネントのプロパティを操作する場合には、
そのコンポーネントのクラスでキャストを行う必要があります。
ここではTEditでキャストして、Textプロパティを参照しています。
作成したEditExitを共通で利用する場合には、他のTEditのOnExitイベントでEditExitを選択します。
同一のチェックを行うTEditのOnExitで指定するだけで、各コンポーネントから同じチェックが実行されます。
コンポーネントの種類が異なっても同様にSenderを使うことで、共通の処理を行うことができます。
(ミガロ.情報マガジン「MIGARO News!!」Vol.138 2012年5月号より)