4D-JUG
Would you like to react to this message? Create an account in a few clicks or log in to continue.

できると思ってできなかったこと

2 posters

Go down

できると思ってできなかったこと Empty できると思ってできなかったこと

投稿 by tomita 2016-11-16, 3:56 pm

v15を使ってて、フォームオブジェクトのポインタから、オブジェクト名を調べることができませんでした。
以前ならRESOLVE POINTERを使って、変数名で判断してたんですけど、変数名をなくして、動的な変数にしたので、困るようになったみたいです。
OBJECT Get name が使えそうなんですけど、リストボックスの場合は、戻り値がリストボックスのオブジェクト名で、カラムのオブジェクト名を返してくれなかったので、どのカラムでの処理なのかの判別に使えませんでした。

tomita

投稿数 : 11
登録日 : 2016/11/11

トップに戻る Go down

できると思ってできなかったこと Empty Re: できると思ってできなかったこと

投稿 by miyako 2016-11-16, 4:08 pm

同一の変数が複数のオブジェクトにバインドされていることも有り得ますし,オブジェクトの変数はいつでも変えられるので(OBJECT SET DATA SOURCE),変数から名前の変換は仕組上,できないのではないでしょうか。

OBJECT Get nameは,オブジェクトメソッド内(Object current)で非常に重宝します。
逆に,フォームメソッドなどに処理を集約することには向いていません。
Object with focusは,イベントが発生したオブジェクトとは限らないからです。

質問の内容より,列の処理をボックスに記述されていると推測できますが,リストボックス内では,LISTBOX GET ARRAYS,LISTBOX GET OBJECTSでサブオブジェクト名を調べるのが一般的です。クリックなどのマウスイベントが発生した行列の番号をLISTBOX GET CELL POSITIONで特定し,列の名前を知ることができます。

あるいは,列のオブジェクトメソッドに処理を記述したほうが簡単かもしれません。

miyako

投稿数 : 483
登録日 : 2016/07/05

トップに戻る Go down

できると思ってできなかったこと Empty Re: できると思ってできなかったこと

投稿 by miyako 2016-11-16, 4:11 pm

あと,ドラッグ&ドロップの場合は,DRAG AND DROP PROPERTIESやRESOLVE POINTERを使用した旧式のメソッドではなく,ペーストボード経由の新しいスタイルにしたほうがシンプルです。その場合,列の名前など,必要な情報はペーストボードにカスタムのデータ型を追加して伝達します。

miyako

投稿数 : 483
登録日 : 2016/07/05

トップに戻る Go down

できると思ってできなかったこと Empty Re: できると思ってできなかったこと

投稿 by tomita 2016-11-16, 5:12 pm

LISTBOX GET CELL POSITIONの存在を忘れていました

Code:
$ListBoxName:=OBJECT Get name(Object current)
LISTBOX GET ARRAYS(*;$ListBoxName;$arrColNames;$arrHeaderNames;$arrColVars;$arrHeaderVars;$arrColsVisible;$arrStyles)
LISTBOX GET CELL POSITION(*;$ListBoxName;$column;$row)
$0:=$arrColNames{$column}

 みたいなコードで解決することができました。お騒がせして申し訳ありませんでした。

tomita

投稿数 : 11
登録日 : 2016/11/11

トップに戻る Go down

できると思ってできなかったこと Empty Re: できると思ってできなかったこと

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可