Curl Global Community
DateField の ValueFinished の抑制 - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: DateField の ValueFinished の抑制 (/showthread.php?tid=831)



DateField の ValueFinished の抑制 - umemura - 01-24-2013

DateField では、1文字ごとに入力内容をパースして、
YYYY/MM/DDなど、フォーマットとして正しい値であればそのタイミングでValueFinishedが発生すると思いますが、
この ValueFinished を抑制することはできますか?

通常の TextField のように、フォーカスアウトやEnterキーの押下などでValueFinished を発生させたいのですが、可能でしょうか。



RE: DateField の ValueFinished の抑制 - umemura - 01-24-2013

独自のイベントを利用することで無理やりできそうです。

Code:
{define-class public DateFieldValueFinished {inherits GuiEvent}
  {constructor public {default}
    {construct-super}
  }
}
{define-class public TestDateField {inherits DateField}
  {constructor public {default ...}
    {construct-super {splice ...}}
  }
  ||ValueFienid の発生をコントロールするために DateFieldValueFinished 発生時かどうかを判断する変数
  field private do-finished?:bool = false
  ||値が変更されたかどうかを判断するための値保持変数
  ||ValueFienid の発生をコントロールすることが目的
  field private prev-val:#DateTime = null

  ||通常のTextField と同様のタイミングでValueFinished が発生するようにコントロールする
  {method public {handle-event e:Event}:void
    {type-switch e
     case vf:ValueFinished do
        || DateFieldValueFinished 発生時以外のValueFinised は握りつぶす
        {if not self.do-finished? then
            {vf.consume}
            {return}
        }
     case kp:KeyPress   do
        ||Ennterキー押下時にDateFieldValueFinished を発生させる
        {if kp.value == KeyPressValue.enter then
            {self.handle-event {DateFieldValueFinished}}
        }
     case fi:FocusIn do
        ||フォーカスイン時に前回の値を保持する
        set self.prev-val = self.value
     case fo:FocusOut do
        ||フォーカスアウト時に前回の値と比較し、変更されていれば DateFieldValueFinished を発生させる
        {if self.prev-val != self.value then
            {self.handle-event {DateFieldValueFinished}}
        }
     case dfvfe:DateFieldValueFinished  do
        || DateFieldValueFinished のときのみ、ValueFinished が発生するように do-finished?フラグを立てる
        {with self.do-finished? = true do
            {self.handle-event {ValueFinished}}
        }
    }
    {super.handle-event e}
  }
}