vb如何判断Ctrl键被按下了?

tejpe616818 2013-01-26 03:30:01
比如我想一个按钮同时实现两种点击:
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

谢谢!
...全文
1392 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
tejpe616818 2013-01-27
  • 打赏
  • 举报
回复
多谢版大和Chen8013!!
bcrun 2013-01-26
  • 打赏
  • 举报
回复
嗯,他应先“把窗口的 KeyPreview属性设置为True”
舉杯邀明月 2013-01-26
  • 打赏
  • 举报
回复
版主说的这些,还是得在 KeyDown()、KeyUp()这两个事件中处理吧……
bcrun 2013-01-26
  • 打赏
  • 举报
回复
VB这里不用那么复杂,直接这样就行了 If (Shift And VbCtrlMask) > 0 Then 如果需要测试 shift 参数,可使用该参数中定义各位的 shift 常数。该常数有下列值: 常数 值 描述 vbShiftMask 1 SHIFT 键的位屏蔽。 VbCtrlMask 2 CTRL 键的位屏蔽。 VbAltMask 4 ALT 键的位屏蔽。
舉杯邀明月 2013-01-26
  • 打赏
  • 举报
回复
有两个方法: ① 用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的方法,这样方便些。

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧