投稿時間: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)にフォーカスを移動
です。
ご教授お願いいたします。
|