プルダウンメニュー(ドロップダウンリスト)

4Dのフォームオブジェクトのプルダウンメニューの実装方法について説明する。ちなみにプルダウンメニューは、ポップアップメニューとかドロップダウンリストとか、ドロップダウンメニュー、ポップアップリスト等々、呼び名にもバリエーションがある。

実装方法といってもたいしたことはないのだが、プルダウンメニューというのは処理系によってちょっと癖があって、久しぶりに実装しようとすると、あれ、どうやるんだっけ、となる。4Dについては、もう何回もこのモードにハマっている。沼である。沼から早く脱出するにはブログにまとめるしかない、と。

また個人的な趣味として、標準的な書き方に統一したいというのがある。コーディングスタイルというやつだ。プログラマならどなたにもお有りだろうと思う。メソッド名や変数名の付け方とか、モジュール化のルール、うちではこのやり方しかやらない、等々。

たとえ仕組みを理解していたとしても、書き方がいつも同じようでないとまずい。次のように実装したい。
1)フォームオンロードのメソッド「_frmDefInit」で値リストを格納する配列変数を宣言する
2)フォームオンロードのメソッド「_popXX_make」で配列を作成、初期値をセット
3)プルダウンメニューにプロセス変数を割り当てて、オブジェクトメソッドに選択されたときの処理を記述

会計ジロウのコードを紹介する。勘定科目でカテゴリーを選択するプルダウンメニュー。フォームのオンロードで、プルダウンメニューオブジェクトをプロセス変数の配列で宣言する。今回は明らかに文字列だが、数値であっても単位を付けたり文字連結したくなったりするので、ここは迷わず文字列の配列にする。→プルダウンメニュー2

//AC06_frmDefInit
//20230627 wat
//ACCOUNT フォーム上のプロセス変数 宣言・初期化
...
// カテゴリーポップアップ
ARRAY TEXT(vAC06_popCategory; 0)

続けて、オンロードで次のAC06_popCategory_makeを実行。

//AC06_popCategory_make
//20230704 wat
// カテゴリーポップアップを作成

C_LONGINT($index)
C_TEXT($category)

DELETE FROM ARRAY(vAC06_popCategory; 1; Size of array(vAC06_popCategory))

APPEND TO ARRAY(vAC06_popCategory; "資産")
APPEND TO ARRAY(vAC06_popCategory; "負債")
APPEND TO ARRAY(vAC06_popCategory; "資本")
APPEND TO ARRAY(vAC06_popCategory; "収益")
APPEND TO ARRAY(vAC06_popCategory; "費用")

vAC06_popCategory:=0

//20171101 wat デオフォルト表示
$category:=AC06_varAC_CATEGORY_get
$index:=Find in array(vAC06_popCategory; $category)
If ($index>0)
	vAC06_popCategory:=$index
	
End if 

プルダウンメニュー「vAC06_popCategory」のオブジェクトメソッド。

内容は次のとおり。
//AC06_popCategory
//20230709 wat
//カテゴリー、ポップアップが選択された

C_TEXT($category)

$category:=vAC06_popCategory{vAC06_popCategory}
...

文字列型配列「vAC06_popCategory」には選択されているインデックス値が入っているので、上記のようなコードで選択されている文字列をローカル変数「$category」に取得することができる。ちなみにvAC06_popCategoryに0を代入すると(vAC06_popCategory:=0)、未選択状態になる。

//まとめ:選択行を取得するには、
$index:=vAC06_popCategory
$value:=vAC06_popCategory{vAC06_popCategory}

今回のパターンはプルダウンリストに固定配列の文字列を表示した。次の例ではテーブルの複数の列から持ってきた値を表示する方法について示す。

プルダウンメニュー2