ページの先頭行へ戻る
NetCOBOL V12.2 PowerCOBOL ユーザーズガイド
FUJITSU Software

8.2.2 オブジェクトをイベントの引数として受け取るには

オブジェクトを引数として受け取るイベント手続きを編集する場合、手続きを記述する前に、連絡節の修正が必要です。たとえば、ツリービューコントロールのノードがクリックされた場合に発生するNodeClickイベントでは、次のような手続きが初期値として生成されます。

    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
    LINKAGE         SECTION.
    01  POW-PCMNODE OBJECT REFERENCE [Class Name].
    PROCEDURE       DIVISION USING POW-PCMNODE.

オブジェクトを受け取る場合、上記の[Class Name]の部分を修正する必要があります。 修正してオブジェクトを受け取るには、以下の2つの方法があります。

オブジェクトのクラス名を設定して受け取る

受け取るオブジェクトに対応するクラス名を、[Class Name]の部分に記述することで、手続き中でオブジェクトにアクセスできます。たとえば、上記のNodeClickイベントでは、ノードオブジェクトを受け取るため、[Class Name]を以下のように変更します。この変更により、手続き中でノードオブジェクト(POW-PCMNODE)にアクセスできるようになります。

NodeClickイベント
    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
    LINKAGE         SECTION.
    01  POW-PCMNODE OBJECT REFERENCE POW-CNODE.
    PROCEDURE       DIVISION USING POW-PCMNODE.

利用可能なオブジェクトのクラス名については、「オブジェクトのクラス名を利用してアクセスする」の表を参照してください。

NetCOBOLの*COMクラスを利用して受け取る

NetCOBOLのCOM連携機能である*COMクラスを利用してオブジェクトを受け取ります。この方法は、サードパーティによって提供されているコントロールのイベントの引数に、オブジェクトが割り当てられている場合など、クラス名がわからないオブジェクトを受け取る場合に利用します。この方法では、以下の手順で、引数で受け取ったオブジェクトを操作できるようにします。

  1. フォーム環境部のリポジトリ段落(REPOSITORY)で*COMクラスを宣言します。

  2. 連絡節の[Class Name]をPOW-COBJECTに変更します。

  3. イベント手続きまたはフォームの作業場所節で、COMオブジェクトとして参照するためのデータを定義します。

  4. PowerCOBOLで用意している変換ルーチン"POWERCONVTOCOM"を呼び出し、連絡節で受け取ったオブジェクトをCOMオブジェクトに変換します。

  5. COMオブジェクトを使って、オブジェクトにアクセスします。

  6. 最後に、使用したCOMオブジェクトにNULLを設定し、クリアします。

"POWERCONVTOCOM"の記述形式については、「NetCOBOLの*COMクラスを利用してアクセスする」を参照してください。

たとえば、NodeClickイベントで、NetCOBOLの*COMクラスを利用して引数を受け取る場合、以下のようになります。

REPOSITORY
        CLASS COM AS "*COM"
NodeClickイベント
    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
   * *COMクラスを使ってアクセスするためのノード用のCOMオブジェクト
    01 COMNODE      OBJECT REFERENCE COM.
    LINKAGE         SECTION.
    01  POW-PCMNODE OBJECT REFERENCE POW-COBJECT.
    PROCEDURE       DIVISION USING POW-PCMNODE.
   *    最初に受け取ったオブジェクトをCOMオブジェクトに変換します。
        CALL "POWERCONVTOCOM" USING POW-PCMNODE RETURNING COMNODE
   *    COMオブジェクト(COMNODE)を使ってオブジェクトにアクセスします。
        …
   *    最後に、使用したCOMオブジェクトをクリアします。
        SET COMNODE TO NULL