[リストへもどる]
一括表示

投稿時間:2004/08/03(Tue) 23:41
投稿者名:Numawo
Eメール:redwolf_Numao@hotmail.com
URL :
タイトル:
コンボボックスでの↑↓キー
初めての投稿ですので、不備がありましたらご指摘お願いします。

今回質問させていただく事柄は、以下のことです。

まず環境はVB6(SP5)です。(Win2k)
VB6は専門学校で1ヶ月程度になります(コンボボックス未学習)

コンボボックスが2個あるとします(それぞれCbo1、Cbo2と仮定)
Styleプロパティで2-ドロップダウンリストをそれぞれ選択しています。
フォームロードで適当な項目がそれぞれADDITEMで設定されています。
同じくフォームロードでcbo1はEnabledプロパティがTrue、cbo2はFlaseです。
(最初にcbo1の選択を強制する意図です)

そしてcbo1の項目をマウスクリックで選択するとcbo2のEnabledをTrueにし、
SetFocusでcbo2にフォーカスを移動するようにしたものが以下のコーディングです。

Private Sub cbo1_click()
    cbo2.Enabled = True
    cbo2.SetFocus
End Sub

あとEnterキーでも同様の動きをさせるため以下のように書きました。

Private Sub cbo1_KeyPress(KeyAscii as Interger)
    IF KeyAscii = 13 Then
        cbo2.Enabled = True
        cbo2.SetFocus
    End If
End Sub

これで実際に実行すると、コンボボックスcbo1にフォーカスがある状態で↓や↑を押すと、
項目は移動可能なのですが、Clickイベントが発生するようで、フォーカスがcbo2に移動してしまいます。
これを、Enterキーを押すまでは↑↓キーを押してもフォーカスが移動しないようにするにはどのようにすればよいのでしょうか??

解決策として、フォームのKeyPreviewをTrueにして、処理を奪うこと等考えているのですがうまくいきません。

どうかわかる方がいらっしゃいましたらぜひ、返答お願いいたします。

投稿時間:2004/08/04(Wed) 14:08
投稿者名:kamurin
Eメール:kamurin@hotmail.com
URL :
タイトル:
Re: コンボボックスでの↑↓キー
グローバル変数でFlgを作って、
cbo1で↑↓を押した時にFlgを立てて、
Flgが立ってる時にcbo1のClickが発生したら、
フォーカスをcbo1にセットしてみてはどうでしょうか


Private Sub cbo1_KeyPress(KeyAscii as Interger)
    IF KeyAscii = 13 Then
        cbo2.Enabled = True
        cbo2.SetFocus
    Elseif KeyAscii = vbKeyUP Or KeyAscii = vbKeyDwon Then
        Flg=True
    End If
End Sub

Private Sub cbo1_click()
  If Flg=Ture then
        cbo1.SetFocus
    Else
      cbo2.Enabled = True
      cbo2.SetFocus
    End If
    Flg=False
End Sub

コンボボックスのKeyPressで↑↓が取れるか試してないけど、
もしダメなら、
フォームのKeyPressで取って、
Private Sub Form_KeyPress(KeyAscii As Integer)
    if Me.ActiveControl.Name="cbo1" Then
         if KeyAscii = vbKeyUP Or KeyAscii = vbKeyDwon Then
             Flg=True
         End If
    End If
End Sub

投稿時間:2004/08/04(Wed) 20:02
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: コンボボックスでの↑↓キー
> そしてcbo1の項目をマウスクリックで選択するとcbo2のEnabledをTrueにし、

ヘルプの「Click イベント」の項にもありますが、マウスクリック以外の動作でも、
Clickイベントは発生します。


> これを、Enterキーを押すまでは↑↓キーを押してもフォーカスが移動しないようにするにはどのようにすればよいのでしょうか??

ComboBoxのClickイベントで制御する替わりに、「DefaultプロパティをTrueにしたコマンドボタン」を
画面外に置いておき、そちらのClickイベントにて制御してみるとか。

投稿時間:2004/08/06(Fri) 00:25
投稿者名:Numawo
Eメール:redwolf_Numao@hotmail.com
URL :
タイトル:
Re^2: コンボボックスでの↑↓キー
お二方、投稿どうもありがとうございます。

KeyPressにDebug.Printをはさんだところ、矢印キーはイベント起こらなかったので、
KeyDownにDebug.Printをはさんで調べると、
矢印キーは、@KeyDown、AClickをいう順でイベントが発生することがわかりました。

そこで、kamurinさんの案を少々手直しして
Pravite Sub Combo1_keyDown(略)
    If KeyCode = 38 Or KeyCode = 40 then
        flgClick = False
    End If
End Sub

Private Sub Combo1_Click(略)
    If flgClick = True then
        Combo2.enabled = True
        Combo2.SetFocus
    Else
        flgClick = True
    End if
End Sub

で期待する動作が実行できそうです。
どうもありがとうございました。