仕事で使う機会が多いので、どうしてもBizの情報発信ばっかになる
(あんまり好きじゃないw)
OnChangeイベントは値をプログラムで設定しても動いてしまうので
フォームに変数を宣言して、前の値から変わったかどうかを判定してます。
OnChange を動作させないたくない場合は
Optionボタンに値を設定する前にフォームに宣言した変数にOptionボタンに設定する値を前もって設定することで
OnChange内のIF文で即リターンするようにします。
Form Form1 {
X = 0;
Y = 0;
Width = 274;
Height = 256;
Number optionOldValue = "";
OptionButton OptionButton1 {
X = 13;
Y = 15;
Width = 240;
Height = 72;
UseChange = $TRUE;
OptionItem OptionItem1[] {
Height = 20;
Width = 150;
LayoutSpacing = 0;
LayoutMargin = 2;
Layout = $VERTICAL;
LayoutSpacing = 2;
}
Function OnChange( e ) {
/* デバッグ */
print(this.Name + " - " + e.EventName + "[" + str(this.Value) + "]");
/* 前の値と今の値を比較して同じ場合は何もしない */
if(^.optionOldValue == this.Value){
^.optionOldValue = this.Value;
return;
}
/* 値を変更するか確認する */
if(^.Kakunin() == $FALSE){
/* 値を元に戻す */
this.Value = ^.optionOldValue;
} else {
/* 値を退避する */
^.optionOldValue = this.Value;
/* 本当に動かしたい処理 ⇒ 今回はテキストボックスに値を設定する。*/
^.TextBox1.Value = this.Value;
}
}
}
TextBox TextBox1 {
X = 13;
Y = 211;
Width = 240;
Height = 24;
}
Function Kakunin(){
var ret = //.MessageBox("値を変更してよろしいですか?", "", $OKCANCEL);
if (ret == CancelSelected) {
return $FALSE;
} else {
return $TRUE;
}
}
Button Button1 {
X = 13;
Y = 96;
Width = 240;
Height = 106;
Title = "値を初期化";
Function OnTouch( e ) {
if (^.OptionButton1.Value != ^.optionOldValue) { /* 設定する値が違うかどうか確認 */
^.optionOldValue = 0;
}
/* 値を初期化 */
^.OptionButton1.Value = 0;
}
}
if ( !$DESIGNTIME ) {
optionOldValue = 0; /* ↓でCSVを設定すると NULL から 001 になるので OnChangeが動く */
/* オプションボタンの値を設定 */
OptionButton1.OptionItem1 csv(.title, .value) {
"タイトル1","001"
"タイトル2","002"
"タイトル3","003"
"タイトル4","004"
"タイトル5","005"
"タイトル6","006"
};
}
}
メモ
フラグで管理しても良かったかもしれん!