OnPreviewKeyDownイベントでウィジェットのフォーカスを制御する
妹「EventReply関係の話を探していたら、なんかウィジェットをキーボードを動かそうとしてる話を見つけたんだけど、その人がやってた方法はこうやってOnPreviewKeyDownイベントをオーバーライドしてたんだよ」
「同じやり方を新しいウィジェット用に試したんだけど、SetUserFocusを使うとEventReply型のパラメータがでてくるから、それをReturnValueにセットすると、理屈はよくわからないけどなんか動いた。これ主人公のキー入力でやるのとウィジェットのイベントをオーバーライドするのと、どっちがいいんだろう?」
「多分どっちでもいいんだろうけど、ウィジェットの方でやった方が自然かな。フォーカスがある時だけ反応するようにする時もいちいちフォーカスを調べなくていいし。でもそうか、こんなところにも使える関数があったのか。OnMouseMoveイベントもちゃんとあったんだなあ」
妹「Previewが付いてるのと付いてないのとどう違うのかわからなかったけど、とりあえず作例ではPreview付いてる方を使ってたからそのまま」
「やり方としては合ってると思う。最初のキー入力の分岐のところとか、整理したくてムズムズはするけど、ぱぱっと直せる感じでもないのか。Key型のSwitchノードも無いし」
妹「なんか良い方法ある?」
「String型に変換出来れば、それを基準にSwitch出来るんだけど、それも無理か。とりあえずKey型の配列を作って受け取りたいキーを一式入れておいて、その中から一致するのを見つけたらその番号を基準にSwitchノードで分岐させるぐらいしか思いつかない」
妹「それだとブランチたくさん作る方が簡単そうだなあ……あとこの方法で気になるのが、普通のカーソルキーを使った移動も有効のままなんだよ。今回の場合だと、AとDでも動くし、カーソルキーでも動く、どっちでも動く感じになる。そのへんどうなってるのかなあと」
(続く)