高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

カスタムコントロールでOnKeyDownが発生しない問題について

今日は久々にプログラミング。フルにプログラミングに入れたのは久しぶりだったかも。
さて、今日はWindows Mobileのプログラミング。UserControlでKeyDownを取得できなくて詰まるの巻。
内容としては操作用のUserControlをDockStyle.Fillで貼り付け、それを操作するというもの。MouseDownイベントはちゃんと発生するものの、KeyDownイベントは発生しないのでどうしたものかという話。
いろいろ探してみると・・・。

PictureBoxはデフォでは入力フォーカスもてないぞw

ふらっとC♯, C#(初心者用) Part18

と言う話が。続いて――

選択できない Windows フォーム コントロールの一覧を次に示します。これらのコントロールから派生したコントロールも、選択できません。
Panel
GroupBox
PictureBox
ProgressBar
Splitter Label
LinkLabel (コントロール内にリンクが存在しない場合)

ふらっとC♯, C#(初心者用) Part18

一応ここにUserControlは入ってないんですが・・・、まあ、コントロールの中になんにも入れてないので、これと同じ扱いと思えばいいんでしょう。


――で、解決策。

Focus()メソッドを呼んでやれば普通にキーイベントも発生はするようだね。

ふらっとC♯, C#(初心者用) Part18

とあったので、以下のコードを挟むことで解決。

    protected override void OnParentChanged(EventArgs e)
    {
      base.OnParentChanged(e);
      this.Focus();
    }

おおー、ちゃんとKeyDownが発生する。――でも、コンパイルしたバイナリをPCWindowsで動かすと、なぜか方向キーだけイベントが発生しないんですね−、なんでだろう?
まあ、ひとまず事象は解決したし、Windows用には別にプロジェクトを用意するつもりなのでひとまず無視します。