仕事で使う機会が多いので、どうしても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" }; }
}
メモ
フラグで管理しても良かったかもしれん!