お世話になります。
VB2005でRadioButtonを継承したカスタムコンポーネントを作成しています。
パネル1にRadioButtonを3つ パネル2にRadioButtonを3を貼り付け
エンター(Enter)か下矢印(Down)で別パネルのチェックのあるボタンに
移動するプログラムを作っています、エンターではうまく動作するので
すが、下矢印だと次のパネルのチェックのあるボタンの次のボタンが
選択されてしまいます。
いろいろ試したのですがうまく動作しません何か良い方法があれば教えて
頂ければと思います、宜しくお願いします。
Public Class RadioButtonStandard
Protected Overrides Sub OnPreviewKeyDown(ByVal e As System.Windows.Forms.PreviewKeyDownEventArgs)
MyBase.OnPreviewKeyDown(e)
If e.KeyCode = Keys.Up Then
Me.TopLevelControl.SelectNextControl(Me, False, True, True, True)
ElseIf e.KeyCode = Keys.Enter OrElse e.KeyCode = Keys.Down Then
Me.TopLevelControl.SelectNextControl(Me, True, True, True, True)
End If
End Sub
Protected Overrides Sub OnEnter(ByVal e As System.EventArgs)
MyBase.OnEnter(e)
Me.BackColor = Color.LightSteelBlue
End Sub
Protected Overrides Sub OnLeave(ByVal e As System.EventArgs)
MyBase.OnLeave(e)
Me.ResetBackColor()
End Sub
End Class
もともとのRadioButtonは、Enterに関する動作は規定されていませんが、
Up/Downに対する動作は規定されています。
> エンターではうまく動作するのですが、下矢印だと次のパネルの
> チェックのあるボタンの次のボタンが選択されてしまいます。
という動作は、OnPreviewKeyDownでフォーカスが移った先のControlで
改めてUp/Downに対する処理が行われてしまうからなのではないかと思います。
ご提示いただいたコードでは、Upの時にもフォーカス遷移後、上の
RadioButtonへフォーカスが移動しますよね。
要はRadioButtonStandard(RadioButtonからの派生クラス)から
Up/Downに対する動作をツブしてやればいいわけですから、例えば
Protected Overrides Function IsInputKey( _
ByVal keyData As System.Windows.Forms.Keys) As Boolean
Select Case keyData
Case Keys.Enter, Keys.Down, Keys.Up
Return True
End Select
Return MyBase.IsInputKey(keyData)
End Function
など、Up/Downに対するデフォルト動作をスルーさせてやればいいのでは
ないかと思いますが、いかがでしょうか。
IsInputKeyで動作をスルーですか、お蔭様で思ったとおりの動作が確認
出来ました、さるべーじさんありがとうございました。