Curl Global Community
DropdownListのイベントについて - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: DropdownListのイベントについて (/showthread.php?tid=1004)



DropdownListのイベントについて - naohiro0104 - 11-11-2013

お世話になります。

DropdownListのイベントについて教えて下さい。
現在 ラジオボタンの値を変更するとDropdownListの値が変更できるような仕組みを考えています。
DropdownListのListボタンを押すとラジオボタンの値によってdata-modelを変更しようと試みてますが
どのイベントを使用しても動きません。

何か方法がございましたらご教示お願いします



RE: DropdownListのイベントについて - umemura - 11-11-2013

「DropdownListの値が変更される」 というのは、リストを入れ替えるという意味でしょうか、
それとも、リストはそのままで、選択されている値を変更したい、という意味でしょうか。

data-model を変更ということは、前者ですかね。

また、前者であれば、リストを変更するタイミングは「Listボタンを押す」時である必要がありますか?
ラジオボタンの値が変更されたタイミングではダメでしょうか。

リストを表示する直前までリストの内容を確定させない、というのはグリッド用のドロップダウンリストでは
パフォーマンスの観点から必要になる場合がありますが、
通常のコントロールであれば、ラジオボタンの値が変更されたタイミングでリストの内容を変更してもよいと思います。

ちなみに、「Listボタン」というのは、DropdownList の右側の[▼]のボタンのことであってますかね?



RE: DropdownListのイベントについて - naohiro0104 - 11-11-2013

umemuraさま

説明が下手ですいません。
DropdownListのリストを入れ替えるです。

タイミングも本来はラジオボタンが押された時が良いのですがどうにも上手くいかず
DropdownListの[▼]ボタンでと思った次第です。

宜しくお願いします



RE: DropdownListのイベントについて - umemura - 11-11-2013

こんな感じでいかがでしょうか。

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}



RE: DropdownListのイベントについて - naohiro0104 - 11-11-2013

umemuraさま

お陰様で思った通りに動作出来る様になりました。
ありがあとうございました。

助かりました