『イ ベ ン ト の 発 生 順 序』
原文「いかすぱげてぃ」さん

掲示板 <543-545> ■1999年12月20日 月曜日 からの転載


桐V8では一連の操作中に様々なイベントが発生するが、そのイベントの発生順序はシステム的に定まっている。下記に一般的なイベント発生の順番を示す。

*------------------------------------------------------------------------------*
<ウインドウが表示されるまで>
*------------------------------------------------------------------------------*

 仮に編集対象表があり、サブフォームを1つ持つフォームの場合のイベントの発生順序は次の通りになる。

0.自動初期 イベント
 フォームの全オブジェクトが読み込まれ、定義画面で宣言した局所変数が宣言される。

1.名札 メイン イベント(メインフォーム)
 メインでは、主に変数の宣言、ライブラリの読み込み、またフォームの対象表以外の表を開く処理を行う。ここではまだ対象表は開かれていない。対象表はすべてのメインイベントが終了、直後に開かれる。

2.名札 メイン イベント(サブフォーム)
 次にサブフォームのメイン処理が実行される。サブフォームの対象表は、すべてのサブフォームのメイン処理が終了したあとに開かれる。

3.フォーム開始 イベント(メインフォーム)
 [フォーム開始]イベント中は、表は開かれているが、フォームウィンドウは開かれていない。従って、このイベント内でウインドウ終了コマンドで自らのウインドウを閉じることは出来ない。

 このイベントが発生する前に、次の処理が終了している。
  順番 処理
  1  フォーム定義画面で定義した局所変数の宣言
  2  メイン処理
  3  サブフォームのメイン処理
  3  編集対象表のオープン
  4  グループ化
  5  [開始条件種別1]の[開始条件名1]
  6  [開始条件種別2]の[開始条件名2]
  7  サブフォームの[レコード移動]イベント
 ここで、対象表の処理対象行またはグループを変更する。また、並べ替えや絞り込みを行なうなどして、対象表の編集状態を変更を行う。

4.レコード移動 イベント
 サブフォームのフォーム開始イベントの前にレコード移動イベントが実行される。
 このイベントは対象表のレコードが移動されるたびに発生するイベントである。検索や絞り込みまたは並べ替え後、また他の処理で、対象表のレコードを移動したときにも発生する。
 用途としては、レコードの移動後、その項目値を変数に代入する場合やオブジェクトの属性の変更時などに使用する。

5.フォーム開始 イベント(サブフォーム)
 メインフォームのフォーム開始イベントと同様、サブフォームのフォーム開始イベントが実行される。

6.ウインドウが表示される
 ウインドウが表示され会話処理が開始される。

※ノート
 例えば、起動タイトルに使用するフォームなどのように、ウインドウを表示後、自動的にクローズしたい場合は、タイマーイベントにてウインドウ終了コマンド(ハンドル=&hwindow)を発行する。

*------------------------------------------------------------------------------*
<マウスイベント>
*------------------------------------------------------------------------------*

マウス操作で発生するイベントは次の順序になる。

1.マウス移動 イベント
 イベント設定したオブジェクト領域内にマウスカーソルが入っている間中発生。
2.マウスインアウト(イン)イベント
 イベント設定したオブジェクト領域内にマウスカーソルが入った瞬間に発生。 
3.マウス左ダウン イベント
 イベント設定したオブジェクト領域内でマウス左ボタンを押した間中発生。
4.マウスキーアップ イベント
 イベント設定したオブジェクト領域内でマウス左ボタンを離した時に発生。
5.マウス左クリック イベント
  イベント設定したオブジェクト領域内でマウス左ボタンをダウンアップした時に発生。

 なお、フォームとオブジェクトに同じイベントが定義されている場合、オブジェクトのイベントが優先される。

*------------------------------------------------------------------------------*
<キーボード操作イベント>
*------------------------------------------------------------------------------*

 キーボードのキーが押されたときに発生するイベントは次の順序になる。

1.キーダウン
 キーボード上のキー(機能キー、文字キー)が押されている間中繰り返し発生する。

2.キー入力
 キー入力イベントは、キーボード上の文字キーが、押されている間中、繰り返し発生する。[テキストボックス]または[グループ項目]オブジェクト内で、値を編集しているときは発生しない。
 
3.キーアップ
 キーボード上のキー(機能キー、文字キー)が離された時、発生する。

※1.システムキーダウン
 [Alt] キーが押されているときに、繰り返し発生する。しかし、[キーダウン]イベントが発生しているあいだは発生しない。

※2.システムキーアップ
 [Alt] キーが離されたときに発生する。他の機能キーより、[Alt] キーが先に離された場合は発生しない。

 なお、これらキー操作で発生するイベントの前に、ウィンドウまたはダイアログボックスが開かれた場合は発生しない。

*------------------------------------------------------------------------------*
<編集:項目訂正:スペースキー>
*------------------------------------------------------------------------------*

 例えば、スペースキーで行訂正を行う場合のイベント発生順序は次のようになる。
(すべてのイベントが定義されている場合)

1.キーダウン イベント<スペースキーが押されて発生>

2.行訂正開始 イベント
 行訂正または項目訂正が、開始されたときに発生するイベント。会話処理では1件のレコードを訂正するたびに発生する。ただし、会話処理を伴わない行訂正または項目訂正では、発生しない。また、変数値の項目訂正でも発生しない。
 項目訂正を開始するにあたり、任意の変数値や、またオブジェクトの属性を変更したりする為に設定。

3.入力前 イベント
 このイベントは、[テキストボックス]などのオブジェクトでの入力が、はじまる前に発生するイベントです。 この時点では、まだ[テキストボックス]のエディタ内には入っていない。
 このイベントでは[テキストボックス]等で編集する値の初期値を設定する。その編集する文字列は、このハンドラの引数 &編集文字列に値を代入することで設定できる。

4.キーアップ イベント<スペースキーが離されて発生>

5.キーダウン イベント <文字入力:訂正する文字を入力>

6.<ウインドウ内に文字が表示される>

7.編集文字列変更 イベント
 [テキストボックス]オブジェクト内などの編集文字列が、変更される都度、発生する。
 [テキストボックス]オブジェクト内に入力(変更)された文字列に応じて、その都度、表やオブジェクトを操作する。編集文字列取得メソッドを利用することで、編集文字列が変更されたかどうかが調べられる。

8.<文字入力を繰り返す場合は5.のキーダウンイベントへ>

9.キーダウン イベント<[Enter]にて確定>

10.入力後 イベント
 入力が終了したあとに発生するイベント。
 [テキストボックス]に入力された文字列を検査して、もし不適切な値であれば再入力させるときなどに使用する。再入力させる場合は、このハンドラの引数 &処理中断 に 1 を代入する。また、入力された値の変更は、このハンドラの &編集文字列の値を変更することで行なえる。変更した値を引数 &編集文字列に代入して、このハンドラを終了すると&編集文字列の値が[テキストボックス]のソースに代入される。
(マニュアルでは、ソース値更新イベントの後に入力後イベントが発生するとなっているが、実際に動作させる入力後イベントが先に発生する)
  ※V8sp2(以降)のhtmlヘルプでは、
  [ソース値更新]イベント→[入力後]イベントは、このイベントの前に発生します。
  [入力後]イベント →[ソース値更新]イベントは、このイベントのあとに実行されます。
と、修正されてます

11.ソース値更新 イベント
 ソースの値が会話処理で更新されたときに発生する。次にフォーカスを移動するオブジェクトを指定したり、また更新モードを変更することも可能。

12.行訂正終了前 イベント
 訂正した内容を、表に書き込む前に発生する。行訂正開始コマンドと対になり、会話処理で1件のレコードを、訂正するたびに発生。同様に、会話処理を伴わない行訂正または項目訂正、変数値の項目訂正では発生しない。行訂正または項目訂正が、キャンセルされても発生する。
 表に書き込む前に、フォーム上で入力されたデータを検査するときなどに使用する。また、表への書き込みをキャンセルして、再入力させることも出来る。

13.行訂正終了 イベント
 行訂正または項目訂正が、終了したあとに発生する。会話処理で1件のレコードを、訂正するたびに発生する。
 このイベントでは更新モードが変更が可能であり、例えば、行訂正または項目訂正が1件終了したら、表示モードに戻すことなどが出来る。

14.フォーカス喪失 イベント<フォーカスが移動>
 オブジェクトがフォーカスを失うときに発生する。
 例えば、フォーカスを失うときのオブジェクトの属性、またはつぎにフォーカスを取得するオブジェクトの属性を設定するときに利用。

15.フォーカス取得 イベント<次の項目がフォーカスを取得>
 オブジェクトがフォーカスを取得するときに発生する。
 フォームを開いた直後、特にフォーカス設定をしていない場合、フォーカスが設定可能な一番うしろのオブジェクト(オブジェクトリストで見て一番上のオブジェクト)がフォーカスされる。

17.キーアップ イベント<[Enter]が離される>

 なお、マウスカーソルによるクリックの場合は1〜5までが次の順序でイベント発生する。(仮にすべてのイベントを定義していた場合)

1.マウス移動 イベント
2.マウスインアウト(イン)イベント
3.マウス左ダウン イベント
4.行訂正開始 イベント
5.マウスインアウト (アウト)イベント
6.入力前 イベント
7.マウス左アップ イベント
8.マウス左クリック イベント

 行挿入やグループ値訂正処理なども、上記とほぼ同じ順序で発生する。

*------------------------------------------------------------------------------*
<入力支援クローズド イベント>
*------------------------------------------------------------------------------*

 このイベントは、[入力支援ボタン]での操作を終了して、親の[テキストボックス]または[グループ項目]オブジェクトの操作に戻る前に発生する。

 仮に項目訂正でのイベント発生順序は次のようになる。

1)入力支援オープン イベント
2)<入力支援ボタンウインドウでの操作>
3)入力支援クローズ イベント
4)編集文字列変更 イベント
5)<[自動終了]属性 ON の場合>
6)ソース値更新 イベント
7)入力後 イベント

*------------------------------------------------------------------------------*
<タイマーイベント>
*------------------------------------------------------------------------------*

 タイマーイベントは、指定した時間が経過するたびに発生し、イベントを定義したフォームが、非アクティブであっても発生する。
 ただし、会話処理用のダイアログボックスが出ているとき、または他のイベントハンドラが実行中のときは発生しない。

*------------------------------------------------------------------------------*
<ウインドウが閉じられる時>
*------------------------------------------------------------------------------*

・フォーム終了 イベント

 このイベントはフォームを終了する前に、他のフォームまたは表の操作、また他のフォームや一括処理で使用する固有変数や共通変数、他のフォームの局所変数に、加工した値を代入するために、ウインドウ終了コマンドやコマンドボタンによる[閉じる]処理の後、実際にフォームウィンドウが閉じる直前に発生する。

なお、このイベントが終了したあと、次の処理が実行される。
  編集対象表のクローズ。
  局所変数の削除。
  イベント処理ファイルのクローズ。

以上(1999.6.30 柿沼)