当前位置: 代码迷 >> VB >> vb怎么判断Ctrl键被按上了
  详细解决方案

vb怎么判断Ctrl键被按上了

热度:10624   发布时间:2013-02-26 00:00:00.0
vb如何判断Ctrl键被按下了?
本帖最后由 tejpe616818 于 2013-01-26 15:33:39 编辑
比如我想一个按钮同时实现两种点击:
1 单单点击这按钮是一个功能, 
2 当Ctrl键被按下的时候点击这个按钮又是另外一个功能. (实际上我是想实现点击list时.但原理应该是一样)
vb好实现吗?

搜到个下面这个代码不行,当窗体中什么控件都没有的时候是有反应,可是甚至一旦添加任何一个控件进窗体,就会没任何反应了,这样看来对我的需求完全没用处:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 17 Then MsgBox "ctrl"
End Sub

用ahk都很容易实现,2句话就行了:

GetKeyState, state, Ctrl
if state = U

 谢谢!

------解决方案--------------------------------------------------------
有两个方法:
① 用API:
Option Explicit

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

Private Sub Command1_Click()
   Me.Cls
   If (GetKeyState(vbKeyControl) And &H8000) Then
      Me.Print "Ctrl+单击!"
   Else
      Me.Print "单击!"
   End If
End Sub


② 在设计时,把窗口的 KeyPreview属性设置为True ,然后在Form_KeyDown()、Form_Up()中处理状标识。
 这个我就不用写代码了,你应该是会的。

建议用API的方法,这样方便些。
------解决方案--------------------------------------------------------
VB这里不用那么复杂,直接这样就行了
If (Shift And VbCtrlMask) > 0 Then

如果需要测试 shift 参数,可使用该参数中定义各位的 shift 常数。该常数有下列值:

常数 值 描述 
vbShiftMask 1 SHIFT 键的位屏蔽。 
VbCtrlMask 2 CTRL 键的位屏蔽。 
VbAltMask 4 ALT 键的位屏蔽。 
  相关解决方案