今日は久々にプログラミング。フルにプログラミングに入れたのは久しぶりだったかも。
さて、今日はWindows Mobileのプログラミング。UserControlでKeyDownを取得できなくて詰まるの巻。
内容としては操作用のUserControlをDockStyle.Fillで貼り付け、それを操作するというもの。MouseDownイベントはちゃんと発生するものの、KeyDownイベントは発生しないのでどうしたものかという話。
いろいろ探してみると・・・。
PictureBoxはデフォでは入力フォーカスもてないぞw
ふらっとC♯, C#(初心者用) Part18
と言う話が。続いて――
選択できない Windows フォーム コントロールの一覧を次に示します。これらのコントロールから派生したコントロールも、選択できません。
ふらっとC♯, C#(初心者用) Part18
Panel
GroupBox
PictureBox
ProgressBar
Splitter Label
LinkLabel (コントロール内にリンクが存在しない場合)
一応ここにUserControlは入ってないんですが・・・、まあ、コントロールの中になんにも入れてないので、これと同じ扱いと思えばいいんでしょう。
――で、解決策。
Focus()メソッドを呼んでやれば普通にキーイベントも発生はするようだね。
ふらっとC♯, C#(初心者用) Part18
とあったので、以下のコードを挟むことで解決。
protected override void OnParentChanged(EventArgs e) { base.OnParentChanged(e); this.Focus(); }
おおー、ちゃんとKeyDownが発生する。――でも、コンパイルしたバイナリをPCWindowsで動かすと、なぜか方向キーだけイベントが発生しないんですね−、なんでだろう?
まあ、ひとまず事象は解決したし、Windows用には別にプロジェクトを用意するつもりなのでひとまず無視します。