できると思ってできなかったこと
2 posters
できると思ってできなかったこと
v15を使ってて、フォームオブジェクトのポインタから、オブジェクト名を調べることができませんでした。
以前ならRESOLVE POINTERを使って、変数名で判断してたんですけど、変数名をなくして、動的な変数にしたので、困るようになったみたいです。
OBJECT Get name が使えそうなんですけど、リストボックスの場合は、戻り値がリストボックスのオブジェクト名で、カラムのオブジェクト名を返してくれなかったので、どのカラムでの処理なのかの判別に使えませんでした。
以前ならRESOLVE POINTERを使って、変数名で判断してたんですけど、変数名をなくして、動的な変数にしたので、困るようになったみたいです。
OBJECT Get name が使えそうなんですけど、リストボックスの場合は、戻り値がリストボックスのオブジェクト名で、カラムのオブジェクト名を返してくれなかったので、どのカラムでの処理なのかの判別に使えませんでした。
tomita- 投稿数 : 11
登録日 : 2016/11/11
Re: できると思ってできなかったこと
同一の変数が複数のオブジェクトにバインドされていることも有り得ますし,オブジェクトの変数はいつでも変えられるので(OBJECT SET DATA SOURCE),変数から名前の変換は仕組上,できないのではないでしょうか。
OBJECT Get nameは,オブジェクトメソッド内(Object current)で非常に重宝します。
逆に,フォームメソッドなどに処理を集約することには向いていません。
Object with focusは,イベントが発生したオブジェクトとは限らないからです。
質問の内容より,列の処理をボックスに記述されていると推測できますが,リストボックス内では,LISTBOX GET ARRAYS,LISTBOX GET OBJECTSでサブオブジェクト名を調べるのが一般的です。クリックなどのマウスイベントが発生した行列の番号をLISTBOX GET CELL POSITIONで特定し,列の名前を知ることができます。
あるいは,列のオブジェクトメソッドに処理を記述したほうが簡単かもしれません。
OBJECT Get nameは,オブジェクトメソッド内(Object current)で非常に重宝します。
逆に,フォームメソッドなどに処理を集約することには向いていません。
Object with focusは,イベントが発生したオブジェクトとは限らないからです。
質問の内容より,列の処理をボックスに記述されていると推測できますが,リストボックス内では,LISTBOX GET ARRAYS,LISTBOX GET OBJECTSでサブオブジェクト名を調べるのが一般的です。クリックなどのマウスイベントが発生した行列の番号をLISTBOX GET CELL POSITIONで特定し,列の名前を知ることができます。
あるいは,列のオブジェクトメソッドに処理を記述したほうが簡単かもしれません。
miyako- 投稿数 : 483
登録日 : 2016/07/05
Re: できると思ってできなかったこと
あと,ドラッグ&ドロップの場合は,DRAG AND DROP PROPERTIESやRESOLVE POINTERを使用した旧式のメソッドではなく,ペーストボード経由の新しいスタイルにしたほうがシンプルです。その場合,列の名前など,必要な情報はペーストボードにカスタムのデータ型を追加して伝達します。
miyako- 投稿数 : 483
登録日 : 2016/07/05
Re: できると思ってできなかったこと
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
Permissions in this forum:
返信投稿: 不可
|
|