投稿日 | : 2006/10/26(Thu) 22:42 |
投稿者 | : あっちゃん |
Eメール | : |
URL | : |
タイトル | : 配列チェックボックスのkeyPreviewが効かない? |
みなさま、ちょっと悩んでいますので相談させてください
質問内容を明確に伝えるために実際に使うフォームは使わず
簡易版で質問させていただきます
開発環境はVB6・WinXPProSP2 使用環境はXP・Windows2003Server・WinNTです
Form1というフォームにcmdEndというコマンドボタン
chkpassというチェックボックスが配列で0〜5で6つ有ります。
なお、フォームのkeyPreviewはTrueにしてあり
TabIndexは0からchkpass(0)→chkpass(1)→…→chkpass(5)→cmdEnd→chkpass(0)
となっています
chkpassにフォーカスがあり、Tabキーあるいは↑↓キーでフォーカスがムーブします。
chkpass(0)にフォーカスがあってShift+tabキーor↑キーを押すとchkpass(6)に
フォーカスがあたるようにしたいです(現在はcmdEnd)
またchkpass(5)にフォーカスがあってtabキーor↓キーを押すとchkpass(0)に
フォーカスがあたるようにしたいです(現在はcmdEnd)
ソースは
Private intindex As Integer '配列番号を格納
Private Sub Form_Load()
intindex = 0
End Sub
Private Sub chkpass_GotFocus(Index As Integer)
'配列番号を取得
intindex = Index '★
End Sub
Private Sub chkpass_KeyPress(Index As Integer, KeyAscii As Integer)
Call fsSpecialfocus(KeyAscii)
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
Call fsSpecialfocus(KeyAscii)
End Sub
Private Sub fsSpecialfocus(ByVal intascii As Integer)
Select Case intascii
Case vbKeyDown '↓キー
If intindex = 6 Then
chkpass(0).SetFocus 'チェックボックス1へセットフォーカス
End If
Case vbKeyUp '↑キー
If intindex = 1 Then
chkpass(5).SetFocus 'チェックボックス6へセットフォーカス
End If
Case vbKeyTab 'タブキー
If intindex = 1 Then
chkpass(5).SetFocus 'チェックボックス6へセットフォーカス
ElseIf intindex = 6 Then
chkpass(0).SetFocus 'チェックボックス1へセットフォーカス
End If
End Select
End Sub
Private Sub cmdEnd_Click()
End
End Sub
です
ためしに★の次の行に
msgbox intindex をつけてテストすると
chkpass(0)にフォーカスがあると 0
chkpass(1)にフォーカスがあると 1
…
chkpass(5)にフォーカスがあると 5
のメッセージボックスが表示されます
この場合cmdEndにtabstopをfalseにすればいいかもしれませんが
冒頭で申し上げましたとおり
実運用ではもっと他にコマンドボタンやコンボボックスなどがありますし
業務用なので載せることは不可能です。
(ちなみにこれは自宅で作っています)
長くなってしまったので最終目的をもう一度書きます。
・chkpass(0)にフォーカスがあるときにShift + tab もしくは↑キーで
chkpass(5)にフォーカスを移動
・chkpass(5)にフォーカスがあるときにtab もしくは↓キーで
chkpass(0)にフォーカスを移動
です。
ご教授お願いいたします。