TabStrip1上のComboBoxをアクティブにしてPageDown

解決


JUDE  2006-02-27 00:38:43  No: 130435

はじめまして。
オプションページを作成しているのですが、ちょっと困った現象が
あって、何か回避策があるのか、質問させてください。

Form(frmOptions)上にTabStrip1(tbsOptions)を配置して、
CTRL+PAGEDOWN、CTRL+PAGEUPでページを移動できるように、
Form_KeyDownと、tbsOptions_KeyDownにページ制御のコードを記述しました。

    If (Shift = vbCtrlMask And KeyCode = vbKeyPageDown) Then
        i = frmOption.tbsOptions.SelectedItem.Index
        If i = frmOption.tbsOptions.Tabs.count Then
            '最終タブの場合は先頭のタブに移動します。
            Set frmOption.tbsOptions.SelectedItem = _
                                                   frmOption.tbsOptions.Tabs(1)
        Else
            'タブ位置を増加します。
            Set frmOption.tbsOptions.SelectedItem = _
                                               frmOption.tbsOptions.Tabs(i + 1)
        End If
    ElseIf (Shift = vbCtrlMask And KeyCode = vbKeyPageUp) Then
        i = frmOption.tbsOptions.SelectedItem.Index
        If i = 1 Then
            '先頭タブの場合は最終のタブに移動します。
            Set frmOption.tbsOptions.SelectedItem = _
                     frmOption.tbsOptions.Tabs(frmOption.tbsOptions.Tabs.count)
        Else
            'タブ位置を増加します。
            Set frmOption.tbsOptions.SelectedItem = _
                                               frmOption.tbsOptions.Tabs(i - 1)
        End If
    End If

それで、TabStrip1上にComboBoxを配置して、ComboBoxを選択している状態で、
CTRL+PAGEDOWNやCTRL+PAGEUPを実行すると、ComboBoxのリストに対してPageDownが
行われてしまいます。

一応、こんなこともやってみたのですが、だめでした。

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = vbCtrlMask Then
        Exit Sub
    End If
End Sub
Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
    If Shift = vbCtrlMask Then
        Exit Sub
    End If
End Sub

こういう場合って、どうやって回避すればよいのでしょうか?

開発環境は、VB6、XPです。


gee  2006-02-27 06:47:32  No: 130436

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = vbCtrlMask Then
        tbsOptions.SetFocus    
End If
End Sub


gee  2006-02-27 06:49:44  No: 130437

すいません。入力中に送信してしまいました。
上のような感じにして、コンボボックスからタブなどにフォーカスを移せばいいと思います。


JUDE  2006-02-27 09:41:49  No: 130438

geeさん。回答ありがとうございます。

その方法も、試してみたのですが、だめでした。

動作的には、KeyDownイベントプロシージャを処理してから、
コンボボックスに、KeyDownが飛んでいるようでした。

KeyDownだけでなく、KeyUpにも入れてみましたが、やはりだめでした。

一度発行されてイベントを、キャンセルするようなことができないと、
だめっぽいような気がしてきました。
(そんなことできるのかな?)

うーん。。。
オプションボタンで選択させれば、よいのですが、
テキスト入力もさせたいので、そうなると、オプションボタンと、
テキストボックスを配置しなければ、ならないですよね。

かっこ悪いっすね。

もう少し、色々といじってみます。

何かわかりましたら、また報告させてください。


gee  2006-02-28 07:30:31  No: 130439

このようにしてみてはどうでしょう

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
    If Shift = vbCtrlMask Then
        KeyCode = 0
        tbsOptions.SetFocus
    End If
End Sub


JUDE  2006-02-28 08:17:43  No: 130440

おぉぉーーー。

できました。
geeさん。いや、gee様!

本当にありがとうございました。
そうですね。

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
                              ↑
これも結局ByRefでアドレス渡しをしているということですね。
よくよく考えると、そうなんですが、まるで思いつかなかったです。

早速、それで作りこもうと思います。

本当に、ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加