tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
EnterキーのTab動作扱い (VB6.0) ( No.0 )  [親スレッドへ]
日時: 2012/12/28 12:18
名前: Yacrin

***********************************************************************************
* カテゴリー:[テキストボックス][キー操作][]                                      *
* キーワード:TextBox,フォーカス移動,エンターキー,Enter,タブ移動                  *
***********************************************************************************
'==================================================================================
'投 稿 日:2012/12/28 12:18
'投 稿 者:Yacrin
'タイトル:EnterキーのTab動作扱い (VB6.0)
'動作確認:Windows Vista / Windows 7 / VB6.0(SP6)
'==================================================================================

今さらですが、VB6でのEnterキーのTab動作扱いの事です。
業務使用での大量のバッチ入力作業ではどうしてもTabの代わりに
Enterキーが必要です。そこで、連続の「Shift + Enter」での逆移動
等、今までとは少し違った方法でのEnterをTabキーに完全に対応させた
サンプルをご紹介します。

'//モジュール変数
Dim mKeyDownStatus  As Integer
Dim mKeyPressStatus As Integer

'//フォームのKeyPreview = True にして。

Private Function Get_KeyDownStatus(ByVal wc As Integer, _
                        ByVal ws As Integer) As Integer
    '//移動コード生成
    Get_KeyDownStatus = wc * 10 + ws
End Function

Private Sub KeyStatusClear()
    '//移動コード生成
    mKeyDownStatus = 0
    mKeyPressStatus = 0
End Sub

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    mKeyDownStatus = Get_KeyDownStatus(KeyCode, Shift)
    If KeyCode = vbKeyReturn Then
        '//EnterでTabシミュレート
        SendKeys "{Tab}"        '//SendMessage等を推奨
        KeyCode = 0
    End If

    '//以下省略
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
    mKeyPressStatus = Get_KeyDownStatus(KeyAscii, 0)
    If mKeyDownStatus = 130 Or mKeyDownStatus = 131 Then
        KeyAscii = 0
    Else
         KeyStatusClear
    End If
End Sub

Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    '//連続の「Shift + Tab」対応用、
    '//これがないと、一度Shiftキーを押してしまうと残ってしまうためです。
    '//また、Enterキーの時もクリアしてTabキーの判定に備えます。
    If KeyCode = 16 Or mKeyPressStatus = 130 Then
        KeyStatusClear
    End If
End Sub

Private Sub Text1_Validate(Index As Integer, Cancel As Boolean)
    Dim wcd As Integer: wcd = mKeyDownStatus + mKeyPressStatus
    '//wcd = 260 の時、Enterで順移動しようとしている
    '//wcd =  0 の時、Tab  で順移動しようとしている
    '//wcd = 161 の時、Shift + Tab  で逆移動しようとしている
    '//wcd = 261 の時、Shift + Enterで逆移動しようとしている

    '//通常は wcd = 26 or wcd = 0 で順移動、それ以外は逆移動として判断
    '//逆移動の時、TabIndex = 0 の項目は Cancel = True にしたりできます。
    
    '//以下省略
End Sub

以上です。


------------------------------------- by 花ちゃん -----------------------------
同様のコードは、下記にも掲載してあります。
http://www.hanatyan.sakura.ne.jp/vbhlp/ibe_keyidou.htm
http://www.hanatyan.sakura.ne.jp/vbhlp/ReMoveTab.htm

http://hanatyan.sakura.ne.jp/patio/read.cgi?no=31 (NAO★ さん と あき☆彡 さんの投稿分)



 [スレッド一覧へ] [親スレッドへ]