ビデオ中で説明した操作に加え、以下の点にも留意してください:
利用できるイベントはオブジェクトにより異なります。例えばボタンオブジェクトでOn Data Changeイベントは利用できません。なぜならボタンの内容 (ボタンラベル) を変更することはできないからです。
- On Mouse Enter
マウスがオブジェクトの領域に入ったときに発生します。 - On Data Change
フィールドや変数の内容が変更されて、フォーカスが外れる直前に発生します。
このイベントは特に入力検証、フォーマット、重複チェック、再計算などのために使用されます。 - On Clicked
オブジェクトがクリックされたときに発生します (主にボタンやポップアップ、メニューなど)。
入力可能オブジェクトでも利用できます。 - On Getting Focus
オブジェクトがフォーカスを得た直後に発生します (オブジェクト内でのクリック、タブキーやプログラムなど)。 - On Load
フォームが画面上に表示される直前や印刷される前に発生します。
通常このイベントでフォームの初期化処理を行います。 - On Printing Detail
レコードの印刷中に発生します。
例えば値の合計の計算や文字列の結合などを行えます。
これらはイベントのほんの一部です。完全なリストを見るためには4Dのランゲージリファレンスを参照してください。
ここでよく質問されることがあります。「フォームイベントとオブジェクトイベント、どちらのプロパティリストでチェックを入れたらいいですか?」
回答はシンプルです。メソッドを記述したほうにチェックを入れてください。
注: 例外としてOn LoadとOn Unloadがあります。これらのイベントをオブジェクトメソッドで使用するためには、フォームプロパティ中でもこれらのイベントが選択されていなければなりません。
理論的にはフォームメソッドはフォーム全体の処理に関連するコードを記述すべきです:
- フォームのサイズ変更
- 外部プロセスからの呼び出し
- オブジェクトの表示/非表示
- 等
他方オブジェクトメソッドはそのオブジェクト自身に関わるコードを記述すべきです。これは一般的なルールであり、これから外れるためには適切な理由を考慮すべきです。
以下に留意してください:
- フォームメソッド: グローバルな処理を集中して記述でき、管理がしやすくなります。
リスクとしては必要以上に呼び出されるようになってしまうかもしれません。例えばフォームメソッドでOn Clickedを有効にすると、On Clickedをサポートするオブジェクト上でクリックが発生するたびにフォームメソッドが呼び出されます。 - オブジェクトメソッド: 必要なときにのみ呼び出されます。オブジェクトのコピー&ペーストに伴って簡単にメソッドも複製できます (特にポインターを使用して汎用的に記述している場合)。
特定の処理はフォームメソッドに移動する必要が出てくるかもしれません。
例えば10個の入力可能なパラメーターに基づき値を再計算する必要がある場合、パラメーターが変更されるたびに再計算を行わなければなりません。10個のパラメーター変数それぞれに同じ式を記述するより、フォームメソッドに一回だけ記述したほうが見通しが良くなります。しかし必要以上に再計算が実行されてしまうかもしれません。特にパラメーター以外のフィールドや変数が変更された場合などです。
イベントが実行される順番を知っていることはとても重要です。例えばボタンの場合、イベントは以下の順番で発生します:
- On Mouse Enter
- On Mouse Move
- On Getting Focus
- On Clicked (クリックされた場合)
- On Mouse Leave
- On Losing Focus
フィールドや変数の場合:
- On Mouse Enter
- On Mouse Move
- On Getting Focus
- On Data Change (データが変更された場合)
- On Losing Focus
- On Mouse Leave
コードを記述する時間を節約し、間違いを少なくするためにマクロの利用を検討してください (“macros.xml”ファイル)
例えば“#$evt”とタイプしたら自動的に以下のようなコードが入力されるようなマクロを設定できます:
[#code4D]]$evt:=Form event
Case of
: ($evt=On Data Change)
: ($evt=On Load)
End case [#/code4D
4Dを学び始めたばかりの場合は、オブジェクトメソッドに処理を記述することをお勧めします。そしてメソッドを汎用化するようにし、最終的に必要であればフォームメソッドに移動したり、プロジェクトメソッドとして記述したりしましょう。ポインターのことも忘れないでください。
さらに先に進むには:
イベントがどのように動作するのか慎重に調べてください。なぜなら適切なイベントを選択することで、あなたのプログラムが正しく動作するようになるからです。