PB 電子会議室

コメント

発言No. 更新日 題名(クリックすると発言内容と関連するコメントが表示されます)
5877 99/04/08 22:03:29 RE(2):PB6.5: MENUでのオブジェクト参照方法 By クロノス
5875 99/04/08 21:10:58 RE(1):PB6.5: MENUでのオブジェクト参照方法 By Taka
5874 99/04/08 20:30:31 PB6.5: MENUでのオブジェクト参照方法 By クロノス

カテゴリ:
日付:1999年04月08日 21:10 発信者:Taka
題名:RE(1):PB6.5: MENUでのオブジェクト参照方法

クロノスさん、こんばんは。
(↑おぉっ!この時間帯だと「こんばんは」になってくれた!)

結構ありがちですね。これって。

>w_detaildata w_detail
>open(w_detail)
>(w_detaildata… ウィンドウペインタで作成したウィンドウ)

これは、w_detaildata型の変数 w_detail を意味し、開いたウィンドウへの参照はこの変数に格納されます。
(ローカルで宣言しているので、その情報はスクリプトの終了と同時に消えます)

>if w_detaildata.dw1.getrow() > then ?

この記述は、w_detaildata型のグローバル変数 w_detaildataを意味します。(暗黙に宣言されている)
NULLオブジェクト参照エラーとは、この変数に開いたウィンドウへの参照が格納されていないためです。


メニューオブジェクトからコントロールを直接参照する方法としては、
w_detaildata  win
win = ParentWindow
if win.dw_1.GetRow() = 0 then
と書けば可能です。

これ以外にも、
(1) ParentWindowの中のコントロール名(クラス名)を、文字列\"dw_1\"でサーチしてdatawindow型の変数に入れる
(2) メニュー側にdatawindow型のインスタンス変数を用意し、ウィンドウOpen時に dw_1への参照を代入しておく
(3) 直接コントロールにアクセスしないで、ウィンドウ関数やイベントをParentWindow代名詞で動的呼び出しする
など、さまざまな方法が考えられます。

どれが一番良いかは一概に判断できませんが、私は(2)の方式を好んで使っています。
インスタンス化されたコントロールへの参照を、他のオブジェクトに「エントリー」するという方法です。
(特に祖先クラスで統一した制御をしたい場合などに有効かと思っています)


付加情報:

PowerBuilder Version (記載なし)

Client SoftWare

OS Windows NT 4.0
DBMS Oracle SQL*Net 8
Browser (記載なし)

Server SoftWare

OS (記載なし)
DBMS Oracle 8.0
WebServer (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.