如何判断是否按了组合键如:Ctrl+A+B+C?

0001700 2004-06-11 10:18:59
Private Sub form_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.A e.KeyCode = Keys.B e.KeyCode = Keys.C And e.Control
Then

End If
End Sub
上例在当独判断一个组合时(如Ctrl+A)有用,多个组合时(如上)就没用,而且当前焦点在datagrid的单元格里时也无法响应事件,如何解决,谢谢!

...全文
462 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
9sun888 2004-06-21
  • 打赏
  • 举报
回复
我的这段代码是错了,是要用一个全局变量来判断,就象楼上的那样能正确运行!
AntingZ 2004-06-20
  • 打赏
  • 举报
回复
try:

定义一个全局变量m_i=0

If e.Control And (e.KeyCode = Keys.A Or e.KeyCode = Keys.B Or e.KeyCode = Keys.C) Then
Select Case e.KeyCode
Case Keys.A
If m_i = 0 Then m_i = 1 Else m_i = 0
Case Keys.B
If m_i = 1 Then m_i = 2 Else m_i = 0
Case Keys.C
If m_i = 2 Then
'执行你的事件
End If
m_i = 0
End Select
Else
m_i = 0
End If

0001700 2004-06-20
  • 打赏
  • 举报
回复
上面的程序有点问题,就是第二次按组合键时只要按最后一个组合键(如上例的ctrl+c)也会响应事件,没办法严格地要求a-b-c的顺序,而且一定要a开头的组合键才有用,不知可有解决的办法,谢谢!
9sun888 2004-06-19
  • 打赏
  • 举报
回复
如果是让用户自已去设定具体所按的组合键的话,只需设定Keys就可以了!
如上面:
keyData = (Keys.Control Or Keys.A Or Keys.B Or Keys.C)就是组合键Ctrl+A+B+C键
keyData = (Keys.Control Or Keys.A)就是组合键Ctrl+A键
0001700 2004-06-13
  • 打赏
  • 举报
回复
能否说一下在哪里才能找到有关WM_KEYDOWN常数的全部值,因为我想让用户自已去设定具体所按的组合键,另外我在程序中的Datagrid控件中也重写了这个类的方法,所以在datagrid中时还是无法捕捉到这些组合键,难道只能在datagrid中重写的方法中也要加入这个判断吗?
9sun888 2004-06-13
  • 打赏
  • 举报
回复
我是这样写的!把这段代码放入主程序窗口的代码中,运行一下看一下结果吧!
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
If msg.Msg = &H100 And keyData = (Keys.Control Or Keys.A Or Keys.B Or Keys.C) Then
'&H100即WM_KEYDOWN常数
MessageBox.Show("你按下了组合键Ctrl+A+B+C键!")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
minajo21 2004-06-11
  • 打赏
  • 举报
回复
下面是 ctr + A + B 的:

Dim m_blnPressedA As Boolean
Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp
If e.KeyCode = Keys.A Then
Me.m_blnPressedA = False
End If
End Sub

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
If e.KeyCode = Keys.A Then
Me.m_blnPressedA = True
End If

If e.KeyCode = Keys.B And e.Control And Me.m_blnPressedA = True Then
MsgBox("")
Me.m_blnPressedA = False
End If
End Sub
minajo21 2004-06-11
  • 打赏
  • 举报
回复

我看只能设计个变量,在 keydown、keyup里面判断。
0001700 2004-06-11
  • 打赏
  • 举报
回复
这样岂不是很麻烦,还有别的方法吗?

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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