RadioButtonを継承したカスタムコンポーネント

解決


TOSHI  2008-02-15 21:10:47  No: 144453  IP: 192.*.*.*

お世話になります。
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

編集 削除
さるべーじ  URL  2008-02-16 19:50:29  No: 144454  IP: 192.*.*.*

もともとの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に対するデフォルト動作をスルーさせてやればいいのでは
ないかと思いますが、いかがでしょうか。

編集 削除
TOSHI  2008-02-16 21:35:21  No: 144455  IP: 192.*.*.*

IsInputKeyで動作をスルーですか、お蔭様で思ったとおりの動作が確認
出来ました、さるべーじさんありがとうございました。

編集 削除