Thread Rating:
  • 393 Vote(s) - 2.84 Average
  • 1
  • 2
  • 3
  • 4
  • 5
フォーカスを受け付けないボタン押下時に、別テキストフィールドの入力確定を行う
05-16-2013, 05:55 PM,
#2
RE: フォーカスを受け付けないボタン押下時に、別テキストフィールドの入力確定を行う
GUI関連のイベント処理順を自力で制御するのは難易度、リスク共に高そうなので、
ボタン押下時と同様のイベントを疑似的に発生させて各種イベントの処理順は
システムにおまかせ、という方法が無難ではないかと思います。

プログラムでボタン押下時と同じような動作を行わせるのは、次の手順でできそうです。

 1. フォーカスをボタンに移動させる
   →入力中のテキストフィールドからフォーカスが外れて入力が確定する

 2.ボタン押下イベントをイベントキューに積む
   →イベントキューに積んでいるので、先に行うフォーカス移動に付随して発生する
    イベントが処理されてからボタン押下イベントハンドラが呼ばれる

一例として、テキストフィールドにIMEで日本語入力中、変換を確定していない状態で、
ショートカットキーで処理を実行した場合でも、GUIのボタンを押した場合と同様に
日本語変換を確定して文字列を取得できるコードを書いてみました。

Code:
{value
    || コピー元TextField
    def src-tf =
        {TextField
            width=3cm
        }
    || コピー先TextField
    def dst-tf =
        {TextField
            width=3cm,
            editable? = false
        }
    || コピー実行コマンドボタン
    def copy-button =
        {CommandButton
            label = "&Copy",
            style = "standard",
            {on Action at btn:CommandButton do
                || TextFieldに入力されて確定されている値をコピー
                {set dst-tf.value = src-tf.value}
            }
        }

    || Ctrl-cキー押下時イベント
    def on-ctrl-c-key-proc =
        {proc {}:void
            || コマンドボタンへフォーカスを移動する
            {copy-button.become-active-from-traversal}

            || ※ 入力中の TextField からフォーカスが外れた際に発生するイベントが
            || 全て処理された後にコマンドボタンのActionイベントハンドラを実行させる為、
            || handle-eventメソッドで直接Actionイベントハンドラを呼び出さずに
            || イベントキューにコマンドボタンの"Action"イベントを積む
            {copy-button.enqueue-event {Action}}
        }

    || キーボードショートカットを登録
    {{get-gui-manager}.add-event-handler
        {on kp:KeyPress do
            {if kp.ctrl? and kp.value == 'c' then
                {on-ctrl-c-key-proc}
            }
        }
    }

    ||
    {VBox
        halign="center",
        {VBox
            {text 上段のテキストを下段へコピーします},
            {text 「Copy」ボタンまたはCtrl+cキーを押してください}
        },
        src-tf,
        copy-button,
        dst-tf
    }
}


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


Users browsing this thread:
1 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')