dropdownList や listBox 内の項目を更新する方法はありますか。
 
 
 

MAXScript に関する質問と回答 > スクリプト UI の操作 > dropdownList や listBox 内の項目を更新する方法はありますか。

.items プロパティは文字列の配列です。通常の配列のように配列を操作したり、append findItem deleteItem などのメソッドを使用したりできます。メソッドを使用して内容を変更したり、その結果を .items プロパティに何度も必要なだけ割り当てることができます。

次のサンプル スクリプトでは、2 つの初期項目の格納された listBox UI 要素を含むダイアログ ボックスを作成します。ここには、listBox の内容を操作するための 3 つのボタンもあります。

最初のボタンを押すと、新しい項目がリストの末尾に追加されます。

2 番目のボタンを押すと、現在選択されている項目の前に新しい項目が追加されます。

3 番目のボタンを押すと、現在選択されている項目をリストから削除します。

詳細は、次のコード内のコメントを参照してください。

例:

rollout test "Test"
(
listBox testList items:#("Item 1","Item 2")
button addToList "Add Item To End Of List" width:180
button insertToList "Insert After Current Item" width:180
button removeFromList "Remove Current Item" width:180
-- 新しい項目を配列に追加します。append によって結果の配列が返されるので、
-- 結果を .items プロパティに直接割り当てても問題ありません。
on addToList pressed do
  testList.items = append testList.items ("Item "+ (testList.items.count+1) as string)
-- 現在の項目の前に新しい項目を挿入します。
on insertToList pressed do
(
  -- 現在の項目の選択が存在している (0 より大きい) ことを確認します。
  if testList.selection > 0 do
  (
    -- insertItem は結果の配列ではなく OK を返すので、
    -- 式の結果を直接プロパティに割り当てることはできません。
    -- したがって、ローカル変数内で項目の配列のコピーを取得する必要があります。
    temp_array = testList.items
    -- ...ローカル変数内で temp. array の挿入を行います。
    insertItem ("Item "+ (testList.items.count+1) as string) temp_array testList.selection
    -- ...temp. array を .items プロパティに戻します。
    testList.items = temp_array
  )
)
-- 現在選択している項目をリストから削除します。
on removeFromList pressed do
(
  -- 項目が残っているかどうか、有効な選択が存在するかどうかをチェックします。
  -- 次に、現在の項目を削除します。DeleteItem によって結果配列が返されます。
  -- したがって、結果を .items プロパティに直接割り当てることができます。
  if testList.items.count > 0 and testList.selection > 0 do
    testList.items = deleteItem testList.items testList.selection
)
)
createDialog test 200 220
関連事項