このドキュメントでは、次のトピックについて説明します。
BEFORE-OPEN などの標準イベントの他に、ダイアログに対してユーザー定義イベントを定義できます。 あるダイアログが別のダイアログでアクションを起こすことが必要なときに、ユーザー定義イベントは便利です。
ダイアログ A の SEND EVENT
ステートメントでターゲットダイアログ B のユーザー定義イベント名を指定すると、そのユーザー定義イベントが発生します。 ユーザー定義イベントを発生させるターゲットダイアログ B は、すでにアクティブである必要があります。 ダイアログ B は、OPEN DIALOG
ステートメントを使用してアクティブ化できます。 先に OPEN DIALOG
ステートメントを発行していないと、SEND EVENT
ステートメントはランタイムエラーになります。
ダイアログに対するユーザー独自のイベントは、
ダイアログイベントハンドラメニューの ボタンを押すか、またはダイアログのコンテキストメニューから定義できます。 新しく定義するイベントの名前を入力して、対応するイベントセクションを指定します。 ユーザー定義イベントを事前定義されているイベントと区別するために、"#" で始まるユーザー定義イベント名を使うことをお勧めします。イベントハンドラの実行中に、SEND EVENT
ステートメントは別のダイアログ内のユーザー定義イベントハンドラを起動します。 このユーザー定義イベントハンドラの実行が終わると、元のダイアログに制御が戻り、SEND EVENT
ステートメントの次のステートメントから実行が再開されます。 これは、サブプログラムを実行する CALLNAT
ステートメントにたとえることができます。
OPEN DIALOG
ステートメントと同様に、ダイアログにパラメータを渡すことができます。 パラメータを選択的に渡すには(PARAMETERS-clause)、ダイアログの識別子(operand2)の他にダイアログ名を指定する必要があります。
SEND EVENT
ステートメントでは、イベントを処理しようとしているダイアログでイベントを起動しないでください。 例えば、ダイアログ A がダイアログ B にイベントを送り、ダイアログ B のイベントハンドラが、まだイベント処理を終了していないダイアログ A
にイベントを送るような場合が該当します。 ダイアログ A がダイアログ B を開き、BEFORE-OPEN イベントまたは AFTER-OPEN イベントにダイアログ A への SEND EVENT
が含まれている場合も同様です。
ユーザー定義イベントを起動するには、以下の構文を指定します。
SEND EVENT operand1 TO [DIALOG-ID] operand2
|
||||||
WITH operand3... USING [DIALOG] 'dialog-name' WITH PARAMETRS-clause
|
Operand1 は、送信されるイベントの名前です。
Operand2 はユーザー定義イベントを受け取るダイアログの識別子で、I4 のフォーマット/長さで定義する必要があります。 この識別子は、例えば #DLG$PARENT.CLIENT-DATA
の値をクエリすることによって、取得できます。
ユーザーイベントを受け取るダイアログにパラメータを渡すことができます。
operand3 として、ダイアログボックスに渡されるパラメータを指定します。
PARAMETERS-clause を使用して、パラメータを選択的に渡すことができます。
PARAMETERS [parameter-name = operand3]_ END-PARAMETERS
|
注意:
ターゲットダイアログがカタログ化されている場合にのみ、PARAMETERS-clause を使用できます。
Dialog-name は、ユーザー定義イベントを受け取るダイアログの名前です。
operand3 だけを使用してパラメータを渡すと、ユーザー定義イベントは下記の例のようになります。
/* The following parameters are defined in the dialog's /* parameter data area: 1 #DLG-PARM1 (A10) 1 #DLG-PARM2 (A10) 1 #DLG-PARM3 (A10) 1 #DLG-PARM4 (A10) /* When sending the user-defined event, pass the operands #MYPARM1 'MYPARM2' to the parameters #DLG-PARM1 and #DLG-PARM2: SEND EVENT 'MYEVENT' TO #DLG$DIA-ID WITH #MYPARM1 'MYPARM2'
PARAMETERS-clause を使用する場合、ユーザー定義イベントは下記の例のようになります。
/* The following parameters are defined in the dialog's /* parameter data area: 1 #DLG-PARM1 (A10) 1 #DLG-PARM2 (A10) 1 #DLG-PARM3 (A10) 1 #DLG-PARM4 (A10) /* When sending the user-defined event, the operand #MYPARM2 is passed to the /* parameter #DLG-PARM2 and the operand 'MYPARM3' is passed to the parameter /* #DLG-PARM3: SEND EVENT 'MYEVENT' TO #DLG$DIA-ID USING DIALOG 'MYDIALOG' WITH PARAMETERS #DLG-PARM3='MYPARM3' #DLG-PARM2=#MYPARM2 END-PARAMETERS
渡すオペランドとパラメータ定義間のフォーマット/長さの矛盾を避けるには、『ステートメント』ドキュメントに記載されている、DEFINE DATA
ステートメントの BY VALUE
オプションの説明を参照してください。