こんにちは!
ComboBoxで、見た目のラベルと、実際の値と別のものを表示できると思うんですが、
実際ラベルが表示されるのはクリックしたListが表示されているときだけで、
Listを選択すると実際の値になってしまいますよね?
これって、選択してもラベルを表示させることは出来ないのでしょうか?
よろしくお願いいたします。
少々強引ですが、こんな感じでしょうか?
リストが選択されたら値を変数に保持し、unset-valueによってクリアさせて
選択された行に対するラベルを表示させています。
Code:
{def display:VBox = {VBox}}
{def model:DefaultListModel =
{DefaultListModel
"1", "2", "3"
}
}
{def lb:ListBox =
{ListBox
"A","B","C"
}
}
{let st:String = ""}
{Frame
color = "black",
{ComboBox
control-appearance-changeable? = true,
data-model = model,
prompt = "select here",
list-item-creation-proc =
{proc {val:any}:ListItem
{return
{ListValueItem
val,
label = lb[{val.to-int} - 1].value
}
}
},
{on e:ValueFinished at cbo:ComboBox do
set st = cbo.value
{display.clear}
{display.add {format "value: %s", st}}
set cbo.prompt = lb[{cbo.value.to-int} - 1].value
{cbo.unset-value}
{e.consume}
}
}
}
{value display}
usamiさま
ありがとうございます!
う~ん、なるほど・・。
ComboBox.valueで値を取得するのはあきらめて・・ということですね。
ちなみに、値を変数に保持しているなら、ComboBoxのValueを書き換えたのでいいのでは?
と思ってしまうのですが、promptで表示させるのはなにか意味があるのですか?
unset-valueを実行すると選択した値がクリアされるため、
選択した値(1,2,3)を取得しないのであれば、変数に保持しておく必要はありません。
valueを書き換えたら表示も値(1,2,3)になるので、prompt(A,B,C)を書き換えてます。
usamiさま
なるほどー。
ありがとうございます。