12-03-2013, 06:01 PM
12-03-2013, 06:06 PM
「値が修正されたとき」とは、具体的にどういう場合なのか、という定義も必要ですが、
「ValueFinished が発生したタイミングで、前回、同イベントが発生したときの値を参照する」という前提で、
イベントを利用したサンプルコードを記述してみました。
他にも、いろいろなやり方がありそうです。
Curl の「イベント」は、EventTarget に対して handle-event を使って
RecordSet などに対しても投げられるので、便利ですね。
「ValueFinished が発生したタイミングで、前回、同イベントが発生したときの値を参照する」という前提で、
イベントを利用したサンプルコードを記述してみました。
他にも、いろいろなやり方がありそうです。
Code:
||前回の値を通知するためのイベント
{define-class public CustomValueFinished {inherits Event}
||前回値保持用フィールド
field private-set public-get pre-value:String
{constructor public {default pre-value:String}
set self.pre-value = pre-value
}
}
{define-class public CustomTextField {inherits TextField}
||前回値保持用フィールド
field private-get pre-value:String = ""
{constructor public {default ...}
{construct-super {splice ...}}
{self.add-event-handler
{on ValueFinished do
||ValueFinished イベント時に、前回の値を保持するイベントを発行する
{self.handle-event {CustomValueFinished self.pre-value}}
||修正後の値を前回の値として保持する
set self.pre-value = self.value
}
}
}
}
{def tf =
{CustomTextField
||値変更時に、前の値と修正後の値を表示
{on e:CustomValueFinished at tf:TextField do
{popup-message
{Table columns = 2,
"修正前の値", e.pre-value,
"修正後の値", tf.value
}
}
}
}
}
{value tf}
{CommandButton
label = "値の変更",
{on Action do
{tf.set-value-with-events "aaa"}
}
}
Curl の「イベント」は、EventTarget に対して handle-event を使って
RecordSet などに対しても投げられるので、便利ですね。