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

8.4.1 POWERGETCONTROLユーティリティを使って操作する

POWERGETCONTROLユーティリティを使って、Controlsコレクションオブジェクトを構成する任意のコントロールを取り出すことができます。POWERGETCONTROLユーティリティでは、コントロールをNetCOBOLの*COMクラスに対応するオブジェクトとして取り出すことができます。

POWERGETCONTROLの書き方

  CALL  ”POWERGETCONTROL”
            USING  POW-SELF  コントロールのインデックス
            RETURNING  COMオブジェクト
POW-SELF

POW-SELFはフォーム自身を表しています。POW-SELFの代わりに、フォーム名を使うこともできます。

コントロールのインデックス
  PIC  S9(9)  COMP-5

Controlsコレクションオブジェクトを構成するコントロールのインデックスを指定します。インデックスは、フォーム上に配置されたすべてのコントロールに、1から描画順序(背面から前面方向に昇順)に従って振られた、一意な値です。

描画順序の設定方法については、「5.2.3 コントロールの描画順序を変更する」を参照してください。また、描画順序は、フォームのZOrderメソッドによって実行時に動的に変更することもできます。

COMオブジェクト
  USAGE  IS  OBJECT  REFERENCE  COMのクラス名

NetCOBOLで扱うことができる、COMオブジェクトを取り出すためのデータ項目です。この変換ルーチンの出力となります。省略することはできません。COMのクラス名は、リポジトリ段落(REPOSITORY)でNetCOBOLの*COMクラスとして宣言したクラス名です。

POWERGETCONTROLの使用例

たとえば、フォーム上のすべてのテキストボックスコントロールに表示、または入力されたテキストをクリアする場合、以下のような手続きを作成します。

REPOSITORY
        CLASS COM AS "*COM"
ClearButton-Click
    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
   * フォーム上に配置されたコントロールの個数
    01 CONTROLS-COUNT  PIC S9(9) COMP-5.
   * フォーム上に配置されたコントロールのインデックス
    01 CONTROL-INDEX   PIC S9(9) COMP-5.
   * *COMクラスを使ってコントロールにアクセスするための
   * COMオブジェクト
    01 COM-CONTROL     OBJECT REFERENCE COM.
    01 WK-CLASSPROGID  PIC X(80).
    01 EMPTY-TEXT      PIC X VALUE SPACE.
    PROCEDURE       DIVISION.
   *    フォーム上のコントロールの個数を取得します。
        MOVE "Count" OF "Controls" OF POW-SELF TO CONTROLS-COUNT
   *    フォーム上のコントロールを順次取り出し、テキストボックス
   *    コントロールだけを検索し、テキストをクリアします。
        PERFORM VARYING CONTROL-INDEX FROM 1 BY 1
                UNTIL CONTROL-INDEX > CONTROLS-COUNT
   *      コントロールに対応するCOMオブジェクトを取り出します。
          CALL "POWERGETCONTROL" USING POW-SELF CONTROL-INDEX
                                 RETURNING COM-CONTROL
   *      取り出したコントロールのクラス名を求めます。
          INVOKE COM-CONTROL "GET-CLASSPROGID" RETURNING WK-CLASSPROGID
   *      テキストボックスコントロールかどうか、クラス名を使って判定し、
   *      テキストボックスコントロールであれば、テキストをクリアします。
          IF WK-CLASSPROGID = "Fujitsu.PcobTextBox.4" THEN
            INVOKE COM-CONTROL "SET-TEXT" USING EMPTY-TEXT
          END-IF
   *      取り出したコントロールのCOMオブジェクトを解放します。
          SET COM-CONTROL TO NULL
        END-PERFORM

コントロールの個数は、上記の例のように、ControlsコレクションオブジェクトのCountプロパティを使って求めることができます。

ここで作成したサンプルプログラムは、"FormControls\Controls1.ppj"に格納されています。必要に応じて参照してください。

PowerCOBOLが提供している各コントロールのクラス名については、『リファレンス』を参照してください。

ポイント

ControlsコレクションオブジェクトのItemプロパティを使って、コントロールに対応するCOMオブジェクトを取り出すこともできます。以下にItemプロパティを使った2つの例を示します。

Itemプロパティの使用例1

フォーム上の、3番めに描画されるコントロールに対応するCOMオブジェクトは、以下のように取り出すことができます。

    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
   * コントロールを取り出すためのデータ
    01 WK-CONTROL   OBJECT REFERENCE POW-COBJECT.
   * コントロールに対応するCOMオブジェクト
    01 COM-CONTROL  OBJECT REFERENCE COM.
    PROCEDURE       DIVISION.
   *    フォーム上の3番めのコントロールを取り出します。
        MOVE "Item"(3) OF "Controls" OF POW-SELF TO WK-CONTROL
   *    COMオブジェクトに変換します。
        CALL "POWERCONVTOCOM" USING WK-CONTROL RETURNING COM-CONTROL

Itemプロパティの使用例2

フォーム上の、CmText1という名前のコントロールに対応するCOMオブジェクトは、以下のように取り出すことができます。

    ENVIRONMENT     DIVISION.
    DATA            DIVISION.
    WORKING-STORAGE SECTION.
   * コントロールを取り出すためのデータ
    01 CONTROL-NAME PIC X(10) VALUE "CmText1".
   * コントロールを取り出すためのデータ
    01 WK-CONTROL   OBJECT REFERENCE POW-COBJECT.
   * コントロールに対応するCOMオブジェクト
    01 COM-CONTROL  OBJECT REFERENCE COM.
    PROCEDURE       DIVISION.
   *    フォーム上のCmText1という名前のコントロールを取り出します。
        MOVE "Item"(CONTROL-NAME) OF "Controls" OF POW-SELF TO
             WK-CONTROL
   *    COMオブジェクトに変換します。
        CALL "POWERCONVTOCOM" USING WK-CONTROL RETURNING COM-CONTROL