list_box タイルの値は先頭にスペースを含んでいることがあるので(特に複数の項目を取得した場合)、文字列の比較により値をテストすることは避けてください。
リスト ボックスを処理する前に、まず atoi 関数を使用して list_box の値を整数に変換してくださいまた read 関数を使用して、トークンを整数に自動的に変換することもできます。たとえば、justone という名前のリストが 1 つの選択肢しか受け入れない場合、次のコードはリストの 3 番目の項目が選択されたどうかをチェックします。
(setq index ( get_tile "justone"))
(cond
((/= index "") ;See if string is empty.
(= 2 (atoi index))
. ; Process the third entry.
.
.
)
)
atoi 関数は文字列 "0" だけでなく、空の文字列に対しても 0 を返すため、値が 0 の場合は空の文字列どうかをチェックする必要があります。
ポップアップ リストの値は先頭にスペースが含まれないため、値を変換する必要はありません。ポップアップ リストは、複数の項目を選択できません。
リスト ボックスが複数項目の選択をサポートする場合、プログラムは変換を行って、value 文字列の中の複数の値を 1 つずつ調べなければなりません。次の MK_LIST の定義は、ユーザが元の displist から選択した項目だけを含むリストを返します(この例では、ディスプレイ リスト displist はグローバル変数として保持されます)。MK_LIST 関数は、リスト ボックスの現在の $value を引数にして呼び出されます。
(defun MK_LIST (readlist / count item retlist)
(setq count 1)
(while (setq item (read readlist))
(setq retlist (cons (nth item displist) retlist))
(while (and (/= " " (substr readlist count 1))
(/= "" (substr readlist count 1)))
(setq count (1+ count))
)
(setq readlist (substr readlist count))
)
(reverse retlist)
)
上記の 2 つの例はどちらも、単一項目の選択にも使用できます。