【BizBrowser/BizDesigner】OptionボタンのOnChange

仕事で使う機会が多いので、どうしても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"
		};
		
	}
}

メモ
フラグで管理しても良かったかもしれん!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください