プロが教えるわが家の防犯対策術!

こんばんわ。
コンボボックスで、
指定の値をマウス操作でクリックしたときと、
キーボードの上下で、移動後returnを押したときだけ、
MsgBox "処理実行"
を実行したいです。
keystateを使ってみたのですが、前の情報が残っているのかうまくいきません。keystateの情報をクリアさせるか、シンプルに上記を動作させる何かよい方法はありますでしょうか。

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Dim flg1 As Boolean

Private Sub form_load()
Combo1.AddItem (11)
Combo1.AddItem (22)
Combo1.AddItem (33)
Combo1.AddItem (44)
End Sub


Private Sub Combo1_Keyup(KeyCode As Integer, Shift As Integer)

If KeyCode = 13 Then 'return
flg1 = True
Call Combo1_click
End If

End Sub

Private Sub Combo1_click()

If (GetKeyState(&H26) <> 0) Or (GetKeyState(&H28) <> 0) Then ' ↑↓
If flg1 = False Then
Exit Sub

End If
End If

MsgBox "処理実行"
flg1 = False

End Sub

A 回答 (2件)

APIを使わなくても



Private KeyFlag As Boolean

Private Sub Combo1_Click()
If KeyFlag = True Then Exit Sub
ComboEXE

End Sub

Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
KeyFlag = True
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
ComboEXE
End If
End Sub

Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
KeyFlag = False
End Sub

Private Sub ComboEXE()
'*************************
'クリックまたはEnterの処理
'*************************
End Sub
    • good
    • 0
この回答へのお礼

回答少しおそくなってしまいました。すみません。

ありがとうございます!
これで実現できました!

ちなみに
KeyAscii = 0
は、どのようなパターンで必要なものでしょうか?
ここだけわかりませんでした。

お礼日時:2010/03/31 09:53

>KeyAscii = 0



KeyPressイベントのヘルプを参照してください。
コントロールでキーが押された時、KeyPressイベントが発生しますが、この時点ではまだ押されたキーはコントロールに反映されていません
KeyPressイベント内でKeyAsciiの値を変更することで[A]が押されたら[B]が入力されるようにもできます
また、KeyAscii = 0 にすることで押されたキーを無効(押されていない)にすることができます。
たとえば、[0]~[9]以外であればKeyAscii = 0とすれば数値しか入力できないコントロールにすることができます。
今回の例では[Enter]が押された場合コントロールに[Enter]を渡す必要がないのでゼロを代入しています。
    • good
    • 0
この回答へのお礼

理解できました。ありがとうございます。
助かりました!

お礼日時:2010/03/31 12:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!