ComboBox

Q1
ComboBoxの値確定
[内容]
フォーカスがあたっているComboBoxの値を確定したい


A1

[原因]
ComboBoxオブジェクトに入力中の値は、下記のタイミングで確定します。
 ・キーボードフォーカスが失われたとき
 ・Enterキー、Escキー、PageUp、PageDownまたはファンクションキーを押したとき

例えば、Buttonオブジェクトで発生するTouchイベントのイベントハンドラでComboBoxオブジェクトの値を参照する場合、Buttonオブジェクトをマウスクリック、もしくはButtonオブジェクトのAltKeyプロパティに設定したファンクションキー押下でComboBoxオブジェクトの値が確定します。

しかし、ButtonオブジェクトAltKeyプロパティへ値を確定しないキー(HOMEキーなど)を設定した場合や、キーをショートカットキーとしてFormオブジェクトのOnKeyDownイベントハンドラで受けて、ButtonオブジェクトのOnTouchイベントハンドラを呼んだ場合は、値が確定せず、Valueプロパティは空です(Number型の場合は0が入ります)。

[解決方法]
DecideValueメソッドを使用します。 DecideValueメソッドは、未確定状態のオブジェクトの値を、強制的にValueプロパティに転送します。


[サンプルコード]


下記はComboBoxオブジェクトに値を入力し、カーソルが他オブジェクトに移動していない状態で、Alt+Sキーの押下によってComboBoxオブジェクトの値を確定する例です。KeyDownイベントハンドラ内で//.DecideValue();の指定をしない場合、ComboBoxオブジェクトの値は確定しません。

Form Form1 {
    X = 0;
    Y = 0;
    Width = 400;
    Height = 300;

    ComboBox ComboBox1 {
        X = 10;
        Y = 10;
        Width = 100;
        Height = 100;
        ComboItem ComboItem1[0];

        ComboItem1 << CSV( .value ){
            "ComboItem[0]"
            "ComboItem[1]"
            "ComboItem[2]"
        };
    }
    Button Button1 {
        X = 10;
        Y = 50;
        Width = 100;
        Height = 30;
        Title = "ボタン(&S)";
        Function OnTouch( e ) {
            MessageBox(Form1.ComboBox1.Value);
        }
    }
    Function OnKeyDown( e ) {
        if ( e.AltKey == 1 && e.Key == "S"){
            //.DecideValue();
            Form1.Button1.OnTouch( e );
        }
    }
}
管理番号:CmbB_001
  Biz-Collections Bizの宝箱 トップへ
  Biz/Browser・Biz/Designer TIPS集 トップへ