コンボ・ボックス、ラジオ・ボタン・グループ、およびリスト・ボックスは、 いずれもユーザーに対してオプションのグループから単一のオプションを選択するよう求めるという点で似ています。
チェック・ボックス・ウィジェットと同様に、単一選択ウィジェットは、 その状態を表わす変数にバインドする必要があります。ただし、単一選択ウィジェットは、 ブール変数にバインドするのではなく、現在選択されているオプションの索引を表す INT 型の変数にバインドする必要があります。
record singleSelectForm type ConsoleForm
{ formsize=[12,40] }
myRadio consoleRadioGroup
{name = "radio", bounds = [1,2,4,17]};
myCombo consoleCombo
{name = "combo", bounds = [7,2,1,15]};
myList ConsoleList
{name ="list", bounds = [9,2,2,18]};
end
radioValue, comboValue, listValue int = 2;
myWindow WINDOW {name="myWindow", position=[1,1]};
openWindow(myWindow);
myForm singleSelectForm{};
myForm.myCombo.items =
["オプション 1", "オプション 2", "オプション 3"];
myForm.myRadio.items =
["オプション 1", "オプション 2", "オプション 3"];
myForm.myList.items =
["one","two","three","four","five","six"];
displayForm(myForm);
openUI myForm
bind radioValue, comboValue, listValue
//イベント・ハンドラーがここに入ります
end
onEvent (ConsoleRadioGroup.SELECTION_CHANGED : "radio")
SysLib.writeStdout("Radio selected: "::radioValue);
onEvent (ConsoleCombo.SELECTION_CHANGED : "combo")
SysLib.writeStdout("Combo selected: "::comboValue);
onEvent(ConsoleList.SELECTION_CHANGED : "list")
SysLib.writeStdout("List selected: "::listValue);
この方法でコンボ・ボックス・ウィジェットとラジオ・ボタン・グループ・ウィジェットを使用している、コンソール UI プログラムの完全な例を、以下に示します。
package programs;
import forms.singleSelectForm;
program singleSelectTest type BasicProgram {}
radioValue, comboValue, listValue int = 2;
function main()
myWindow WINDOW {name="myWindow", position=[1,1]};
openWindow(myWindow);
myForm singleSelectForm{};
myForm.myCombo.items =
["オプション 1", "オプション 2", "オプション 3"];
myForm.myRadio.items =
["オプション 1", "オプション 2", "オプション 3"];
myForm.myList.items =
["one","two","three","four","five","six"];
displayForm(myForm);
openUI myForm
bind radioValue, comboValue, listValue
onEvent (ConsoleRadioGroup.SELECTION_CHANGED : "radio")
SysLib.writeStdout("Radio selected: "::radioValue);
onEvent (ConsoleCombo.SELECTION_CHANGED : "combo")
SysLib.writeStdout("Combo selected: "::comboValue);
onEvent(ConsoleList.SELECTION_CHANGED : "list")
SysLib.writeStdout("List selected: "::listValue);
end
end
end
package forms;
record singleSelectForm type ConsoleForm
{ formsize=[12,40] }
myRadio consoleRadioGroup
{name = "radio", bounds = [1,2,4,17]};
myCombo consoleCombo
{name = "combo", bounds = [7,2,1,15]};
myList ConsoleList
{name ="list", bounds = [9,2,2,18]};
end
RCP モードで EGL プログラムを実行した場合、ユーザー・インターフェースは以下のようになります:


myForm.list1.multipleSelect = TRUE;
multipleSelect
が FALSE (デフォルト) に設定されている場合、ウィジェットにバインドされた変数の値は、選択された項目の索引を含みます。
最初の項目を選択した場合、変数は番号 1 を含みます。5 番目の項目を選択した場合、変数は番号 5 を含みます。multipleSelect が TRUE に設定された場合、変数は、選択された項目の 2 進数表記を含みます。
リスト内の各項目には、その位置に応じて 2 の倍数が割り当てられます。最初の項目は 1、2
番目は 2、3 番目は 4、4 番目は 8、5 番目は 16、6 番目は 32 で、以下同じように続きます。
変数の値は、選択されたすべての項目の値を合計したものです。
例えば、最初の項目のみ選択した場合、変数には 1 が入ります。
最初と 2 番目の項目を選択した場合、変数には、この 2 つの選択項目の値の合計である 3 が入ります。
2 番目、5 番目、および 6 番目の項目を選択した場合、変数には 50 (つまり 2+16+32) が入ります。