はじめまして。
オプションページを作成しているのですが、ちょっと困った現象が
あって、何か回避策があるのか、質問させてください。
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です。
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = vbCtrlMask Then
tbsOptions.SetFocus
End If
End Sub
すいません。入力中に送信してしまいました。
上のような感じにして、コンボボックスからタブなどにフォーカスを移せばいいと思います。
geeさん。回答ありがとうございます。
その方法も、試してみたのですが、だめでした。
動作的には、KeyDownイベントプロシージャを処理してから、
コンボボックスに、KeyDownが飛んでいるようでした。
KeyDownだけでなく、KeyUpにも入れてみましたが、やはりだめでした。
一度発行されてイベントを、キャンセルするようなことができないと、
だめっぽいような気がしてきました。
(そんなことできるのかな?)
うーん。。。
オプションボタンで選択させれば、よいのですが、
テキスト入力もさせたいので、そうなると、オプションボタンと、
テキストボックスを配置しなければ、ならないですよね。
かっこ悪いっすね。
もう少し、色々といじってみます。
何かわかりましたら、また報告させてください。
このようにしてみてはどうでしょう
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
If Shift = vbCtrlMask Then
KeyCode = 0
tbsOptions.SetFocus
End If
End Sub
おぉぉーーー。
できました。
geeさん。いや、gee様!
本当にありがとうございました。
そうですね。
Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
↑
これも結局ByRefでアドレス渡しをしているということですね。
よくよく考えると、そうなんですが、まるで思いつかなかったです。
早速、それで作りこもうと思います。
本当に、ありがとうございました。
ツイート | ![]() |