お世話になります。
DropdownListのイベントについて教えて下さい。
現在 ラジオボタンの値を変更するとDropdownListの値が変更できるような仕組みを考えています。
DropdownListのListボタンを押すとラジオボタンの値によってdata-modelを変更しようと試みてますが
どのイベントを使用しても動きません。
何か方法がございましたらご教示お願いします
「DropdownListの値が変更される」 というのは、リストを入れ替えるという意味でしょうか、
それとも、リストはそのままで、選択されている値を変更したい、という意味でしょうか。
data-model を変更ということは、前者ですかね。
また、前者であれば、リストを変更するタイミングは「Listボタンを押す」時である必要がありますか?
ラジオボタンの値が変更されたタイミングではダメでしょうか。
リストを表示する直前までリストの内容を確定させない、というのはグリッド用のドロップダウンリストでは
パフォーマンスの観点から必要になる場合がありますが、
通常のコントロールであれば、ラジオボタンの値が変更されたタイミングでリストの内容を変更してもよいと思います。
ちなみに、「Listボタン」というのは、DropdownList の右側の[▼]のボタンのことであってますかね?
umemuraさま
説明が下手ですいません。
DropdownListのリストを入れ替えるです。
タイミングも本来はラジオボタンが押された時が良いのですがどうにも上手くいかず
DropdownListの[▼]ボタンでと思った次第です。
宜しくお願いします
こんな感じでいかがでしょうか。
Code:
{def dl = {DropdownList}}
{def radio-frame-change-data-model =
{RadioFrame
{HBox
{RadioButton
label = "0から10",radio-value = "0-10"
},
{RadioButton
label = "20から30",radio-value = "20-30"
}
}
,
||ラジオボタンの値変更時に、DropdownList.data-modelを変更
{on ValueChanged at rf:RadioFrame do
||ラジオボタンの値が変更されたタイミングで、
||リストの内容を変更する
def dm = dl.data-model
{dm.clear}
{switch rf.value
case "0-10" do
{for i:int = 0 to 10 do
{dm.append i}
}
case "20-30" do
{for i:int = 20 to 30 do
{dm.append i}
}
}
}
}
}
{VBox radio-frame-change-data-model, dl }
{do
||ラジオボタンの値を変更して
||ドロップダウンリストのリストを変更する
||※ set dl.value = ** ではイベントが発生しないことに注意
{radio-frame-change-data-model.set-value-with-events "0-10"}
}
ちなみに、リスト表示時にリストをリフレッシュするには、UIクラスを継承したクラスを作成する必要がありそうです。
Code:
||リスト表示時にリストの内容をリフレッシュするUI
{define-class public CustomDropdownListUI {inherits SkinnableDropdownListUI}
field radio-frame:#RadioFrame
{constructor public {default
radio-frame:#RadioFrame = null,
...}
{construct-super {splice ...}}
set self.radio-frame = radio-frame
}
||リストの表示時に、リストの内容を変更する
{method public {show-dropdown}:void
{self.change-lsit-by-radio-value}
{super.show-dropdown}
}
||リストの内容を変更する
{method {change-lsit-by-radio-value}:void
{if-non-null self.radio-frame then
def dm = (self.control asa DropdownList).data-model
{dm.clear}
{switch self.radio-frame.value
case "0-10" do
{for i:int = 0 to 10 do
{dm.append i}
}
case "20-30" do
{for i:int = 20 to 30 do
{dm.append i}
}
}
}
}
}
{def cdl = {DropdownList ui-object = {CustomDropdownListUI radio-frame = radio-frame-change-data-model}}}
{VBox radio-frame-change-data-model, cdl}
umemuraさま
お陰様で思った通りに動作出来る様になりました。
ありがあとうございました。
助かりました