DOBON.NET DOBON.NETプログラミング掲示板過去ログ

BUTTONのKeyPressイベントについて

環境/言語:[WIN2000 VB.NET2003]
分類:[.NET]

↑↓→←を押すと、BUTTONのKeyPressかKeyDownイベントは効きません。
なぜ?
↑↓→←キーよって、カーソルはBUTTONからほかの指定BUTTONへ移動したいです。
なにか方法がありますか?

よろしく。
こんばんは、johnさん。ピラルクです。

> なぜ?

規定のフォーカス移動のキーとして処理されるため、
KeyPress,KeyDownには回ってきません。(そういうものです)

> なにか方法がありますか?

ControlのProcessDialogKey, ProcessCmdKey, ProcessKeyMessage
あたりで、こういった標準の動作を変えることが可能です。
手っ取り早くFormでやっちゃうと、以下のような感じ。

  Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
    If keyData = Keys.Right OrElse _
       keyData = Keys.Down OrElse _
       keyData = Keys.Left OrElse _
       keyData = Keys.Up Then
      If Me.ActiveControl Is Button1 Then
        Button2.Focus()
        Return True
      End If
    End If
    Return MyBase.ProcessDialogKey(keyData)
  End Function

しかし、フォーカス移動の標準の動作を変えることは、
一般にはおすすめできません。多分、GroupBoxかパネルで
分かれているエリアのButtonに移したいのだと思いますが、
このような問題に遭遇した場合は、装飾のあり方や部品の
配置などUIデザインのあり方を再検討するのも一法かと。
あるいは、ここはTabを使ってしかるべき所と割り切る。
返事ありがとうございました。

わかりました。

この関数(ProcessDialogKey)は知らなかったですね。

今度もよろしく。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板