バージョン 6.3.3
 —  プログラミングガイド  —

ユーザー定義イベントのトリガ

このドキュメントでは、次のトピックについて説明します。


はじめに

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 の値をクエリすることによって、取得できます。

Top of page

ダイアログへのパラメータ渡し

ユーザーイベントを受け取るダイアログにパラメータを渡すことができます。

operand3 として、ダイアログボックスに渡されるパラメータを指定します。

PARAMETERS-clause を使用して、パラメータを選択的に渡すことができます。

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 オプションの説明を参照してください。

Top of page