Net上でよく見かけるサンプルだと、FormのKeyDownイベントとかでSelectNextControlメソッドを利用したフォーカス制御を行っているのが殆どだと思う。
でもその方式にはちょっと問題があって。
グリッド系コントロールなどキー制御を変更したくなるケースに対応するのが困難
なんだよね。グリッド系コントロール、それも業務系だと多そうなのは「Enterだと次のセルへ」にしたいケースが多いんじゃないかな?
なので現実的な方法としてはこうなると自分では思ってます。
- グリッド系など特殊制御が必要なものはコントロール側で制御を行う
- それ以外のコントロールはForm側で一括制御する
うん、一箇所で全てを、というのは逆に保守性が悪くなるというか場合によってはものすごくロジックが長大になることがあるね。
なので個人的な見解での対応を。
- 特殊制御が必要なコントロールは特定のインターフェースを継承しておく
これだけでForm側の制御ロジックがかなりスッキリ。
実際のロジックとしては、こんな感じかな。
Dim target As Control = Me.ActiveControl
If e.KeyCode = Keys.Enter Then
If Not TypeOf target Is (インターフェース名) Then
Me.SelectNextControl(target, Not e.Shift, True, True, True)
End If
End If
本当のロジックはもう少し色々付け加える必要があるだろうけど、まずはこんな形。
0 件のコメント:
コメントを投稿