2009年10月13日火曜日

.NET(Mobile) コントロールの移動

CompactFrameworkでコントロール間をEnterキーと上下矢印キーで移動する方法です。

まず通常のコントロールでEnterキーと上下矢印キーのデフォルト操作をまとめました。
使用した機種はX04HTです。機種によりデフォルト操作が異なります。
コントロールEnterキー上下矢印キー
TextBox動作なし動作なし
ComboBoxドロップダウンリストの展開リストアイテムの選択
DateTimePickerカレンダーの表示値のインクリメント
NumericUpDown動作なし値のインクリメント
CheckBoxチェックON/OFFコントロールの移動
RadioButton動作なしコントロールの移動
LinkLabelClickイベント発生コントロールの移動
ButtonClickイベント発生コントロールの移動

TextBoxではMultiLineプロパティがFalseであればコントロールを移動するようにします。
Enterキーではモバイル開発 TextBoxのTextAlignプロパティの対策を入れる必要もあります。

ComboBox、DateTimePickerではEnterキーのデフォルト操作「ドロップダウンリストの展開」は残し、上下矢印キーはドロップダウンリストが展開していない場合はコントロールを移動とすると操作性が良いと思います。
ドロップダウンが展開しているかどうかはモバイル開発 Controlのドロップダウンが展開されているかを取得するを見てください。

NumericUpDownはどうしますか・・・

コントロールをEnterキーで移動するサンプル
Private Sub KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
    Select Case e.KeyChar
     Case Chr(Keys.Enter)
        Call Api.keybd_event(Api.VK_TAB, 0, 0, 0)
        Call Api.keybd_event(Api.VK_TAB, 0, Api.KEYEVENTF_KEYUP, 0)
        e.Handled = True
    End Select
End Sub


コントロールを上下矢印キーで移動するサンプル
Private Sub KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
    Select Case e.KeyCode
     Case Keys.Up
         Call Api.keybd_event(Api.VK_SHIFT, 0, 0, 0)
         Call Api.keybd_event(Api.VK_TAB, 0, 0, 0)
         Call Api.keybd_event(Api.VK_TAB, 0, Api.KEYEVENTF_KEYUP, 0)
         Call Api.keybd_event(Api.VK_SHIFT, 0, Api.KEYEVENTF_KEYUP, 0)
         e.Handled = True

     Case Keys.Down
        Call Api.keybd_event(Api.VK_TAB, 0, 0, 0)
        Call Api.keybd_event(Api.VK_TAB, 0, Api.KEYEVENTF_KEYUP, 0)
        e.Handled = True
    End Select
End Sub


API
Public Class Api
    Public Const VK_SHIFT As Integer = &H10
    Public Const VK_TAB As Integer = &H9
    Public Const KEYEVENTF_KEYUP As Integer = &H2

     _
    Public Shared Function keybd_event(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer) As Integer
    End Function
End Class

0 件のコメント: