FlexView - GUI操作
クリックしたセルの列番号を取得したい
セルを表現するFlexTextBoxクラスやFlexLabelクラス等では、onClickedイベントハンドラの引数として渡されるEventオブジェクトに列番号が含まれません。
Clickedイベントを利用して列番号を取得したい場合は、予め各FlexTextBoxやFlexLabelオブジェクトに列情報を持たせ、それを参照する方法があります。
セルを表現するオブジェクトには、任意のデータが格納できるdataプロパティが用意されています。このプロパティに列番号を持たせておき、イベント発生時にdataプロパティの値を取得することで、イベント発生元の列番号を判断するといった実装が可能です。この手法は、Clickedイベント以外のイベント処理にも活用できます。
下記のサンプルでは、セルをクリックした場合、またはセルの値を変更した場合にdataプロパティを取得してラベルに結果(列番号)を表示します。
Form form1 { width = 800; height = 600; FlexView flexview1{ x = 24; y = 24; width = 408; height = 184; FlexRecord rec{ FlexTextBox FlexTextBox1{ title = "社員番号"; # dataプロパティに列を判断するための番号を設定 data = 1; } FlexTextBox FlexTextBox2{ title = "社員名(漢字)"; # dataプロパティに列を判断するための番号を設定 data = 2; } FlexTextBox FlexTextBox3{ title = "社員名(かな)"; # dataプロパティに列を判断するための番号を設定 data = 3; } FlexTextBox FlexTextBox4{ title = "所属部署"; # dataプロパティに列を判断するための番号を設定 data = 4; } }; # セルを左クリックした場合に発生 Function OnClicked( e ) { # 選択したセルからdataプロパティを取得し、Labelに表示 var colNo = e.from.data; ^.label2.value = colNo; } # セルの値を変更した場合に発生 Function OnTextChanged( e ) { # 値を変更したセルからdataプロパティを取得し、Labelに表示 var colNo = e.from.data; ^.label4.value = colNo; } } Label label1 { x = 24; y = 224; width = 146; height = 32; value = "選択列:"; verticalAlign = ALIGN_MIDDLE; horizontalAlign = ALIGN_RIGHT; bgColor = Color.CYAN; border = BORDER_PLANE; } Label label2 { x = 170; y = 224; width = 40; height = 32; value = ""; border = BORDER_PLANE; bgColor = Color.WHITE; horizontalAlign = ALIGN_CENTER; verticalAlign = ALIGN_MIDDLE; } Label label3 { x = 246; y = 224; width = 146; height = 32; value = "値を変更した列:"; verticalAlign = ALIGN_MIDDLE; horizontalAlign = ALIGN_RIGHT; bgColor = Color.GREEN; border = BORDER_PLANE; } Label label4 { x = 392; y = 224; width = 40; height = 32; value = ""; border = BORDER_PLANE; bgColor = Color.WHITE; horizontalAlign = ALIGN_CENTER; verticalAlign = ALIGN_MIDDLE; } if (!Application.DESIGNTIME) { /* FlexViewにロード */ flexview1 << csv{ s001,田中太郎,たなかたろう,営業部 s002,鈴木一郎,すずきいちろう,開発部 s003,佐藤次郎,さとうじろう,総務部 s004,山田花子,やまだはなこ,経理部 s005,高橋孝弘,たかはしたかひろ,広報部 s006,山本幸一,やまもとこういち,企画部}; } }
※FlexViewクラスに現在の選択位置を示すcolumnPositionプロパティは存在しますが、
FlexViewオブジェクトの子オブジェクト(FlexTextBoxやFlexLabelオブジェクト等)で発生した
イベントのイベントハンドラ内で参照した際、値の更新タイミングに時間差が生じ、想定通りに
列番号が取得されない場合があるため本件のようなパターンでは利用できません。
Biz-Collections Bizの宝箱 トップへ
Biz/Browser DT・Biz/Designer DT TIPS集 トップへ