Thread Rating:
  • 393 Vote(s) - 2.84 Average
  • 1
  • 2
  • 3
  • 4
  • 5
フォーカスを受け付けないボタン押下時に、別テキストフィールドの入力確定を行う
05-23-2013, 06:40 PM,
#9
RE: フォーカスを受け付けないボタン押下時に、別テキストフィールドの入力確定を行う
dyoshidaさん、kanekoさん、ありがとうございます。
コメントをいただけると非常にうれしいです。

私の前回のソースでは、ボタンをクリックした後、「マウスを動かさない」ままだと、
処理がそこで止まってしまいました。
dispatch-events true となっているため、クリックした直後に、マウスを動かすなどのイベントがない限り、
次のイベントがくるのを待ち続けてしまう、というのが原因だと思います。

dispatch-events false にすれば動くようにはなったのですが、
「もし、先に流すべきイベントがあれば、そのイベントに関連する処理を先に実行してから、
ボタンのActionイベントに入る」という私の意図に沿った処理になっているか少し不安です。

GuiManager.event-handlers が取得できれば、「現時点で先に流すべきイベントがたまっているかどうか」が
わかるのかもしれませんが、このアクセサはプロテクトされているため取得できません。

また、kanekoさんの FocusOut などを利用するのは危ないのでは、というご指摘をヒントに、
コマンドボタンのオーバーライドメソッドを下記のように修正してみました。
こちらのほうが、FocusManager などを取得する必要がないので、シンプルかもしれないですね。

Code:
{method public {take-action}:void
    ||ショートカットキーなどで実行された際に
    ||前段の処理が終了するまで待つ
    def dispatch? = {dispatch-events false}
    {super.take-action}
  }
  {method public {handle-event event:Event}:void
    {type-switch event
     case a:Action do
        {if-non-null v = {self.get-view} then
            ||takes-focus?=false でも、フォーカスが奪えるように
            ||一時的にフォーカスを受け付ける
            {with self.takes-focus? = true do
                ||入力コントロールからフォーカスを奪う
                {self.request-key-focus}
                ||上記のフォーカスを奪ったイベントに関連する処理の実行を待つ
                {dispatch-events false}
                {super.handle-event a}
            }
        }
     else
        {super.handle-event event}
    }
  }


Messages In This Thread
RE: フォーカスを受け付けないボタン押下時に、別テキストフィールドの入力確定を行う - by umemura - 05-23-2013, 06:40 PM
Forum Jump:


Users browsing this thread:
3 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('897')