トップ回答者
Button上のでの左右矢印キーを制御するクラス作成

質問
-
お世話になります。
VB2008でButtonを継承したカスタムコンポーネントを作成しています。
フォームに作成したボタンをボタン1、ボタン2、ボタン3の順で横並びに
貼り付け矢印キーによりボタンの移動を行いたいと思っております
その際、上下矢印は無効にし、左右矢印のみの移動を考えております。結果、実現できたのですが、問題にぶつかってしまいました
1.ボタン1で左矢印を押した場合ボタン3に移ってしまう。
2.ボタン3で右矢印を押した場合ボタン1に移ってしまう。
上記の現象を止めたいと思います。ボタンは3個とは限りません、出来ればDLL化し使いまわししたいと思います。
画面の先頭(タブインデックス0)か画面の最終(最後のタブインデックス)で判定は可能
なのかとか、いろいろ試したのですがうまく動作しません何か良い方法が
あれば教えて頂ければと思います、宜しくお願いします。Public Class btnStandard
Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
Select Case keyData
Case Keys.Down
'Me.TopLevelControl.SelectNextControl(Me, True, True, True, True)
Return True
Case Keys.Right
Me.TopLevelControl.SelectNextControl(Me, True, True, True, True)
Case Keys.Up
'Me.TopLevelControl.SelectNextControl(Me, False, True, True, True)
Return True
Case Keys.Left
Me.TopLevelControl.SelectNextControl(Me, False, True, True, True)
Case Else
Return MyBase.ProcessDialogKey(keyData)
End Select
Return True
End Function
End Class
回答
-
外池と申します。ターチさんの新しいボタンのクラスを、仮に、TarchButtonとしましょうか・・・。
私なら、TarchButton自身に、NeighborRightとNeighborLeftというTarchButton型のメンバーを用意します。で、このメンバーはプロパティーにしておくといいでしょう。
TarchButtonが
[button1] [button2] [button3]
と並ぶのであれば、
button1.NeighborLeft = Nothing
button1.NeighborRight = button2
button2.NeighborLeft = button1
button2.NeighborRight = button3
button3.NeighborLeft = button2
button3.NeighborRight = Nothing
とプロパティーの値をセットするわけです。
で、キーが押されるイベントの情報は、現在フォーカスがあるTarchButtonに渡してやって、上述のプロパティーの情報を使って、フォーカスを移してやります。フォーカスを移そうとする側がNothingであれば、何もしないと。
いかがでしょう?
(ホームページを再開しました)- 回答としてマーク ターチ 2009年9月19日 6:27
すべての返信
-
外池と申します。ターチさんの新しいボタンのクラスを、仮に、TarchButtonとしましょうか・・・。
私なら、TarchButton自身に、NeighborRightとNeighborLeftというTarchButton型のメンバーを用意します。で、このメンバーはプロパティーにしておくといいでしょう。
TarchButtonが
[button1] [button2] [button3]
と並ぶのであれば、
button1.NeighborLeft = Nothing
button1.NeighborRight = button2
button2.NeighborLeft = button1
button2.NeighborRight = button3
button3.NeighborLeft = button2
button3.NeighborRight = Nothing
とプロパティーの値をセットするわけです。
で、キーが押されるイベントの情報は、現在フォーカスがあるTarchButtonに渡してやって、上述のプロパティーの情報を使って、フォーカスを移してやります。フォーカスを移そうとする側がNothingであれば、何もしないと。
いかがでしょう?
(ホームページを再開しました)- 回答としてマーク ターチ 2009年9月19日 6:27