注册 登录
编程论坛 VB6论坛

快捷键不灵活问题

snrtjat 发布于 2013-06-08 18:08, 1135 次点击
Private Sub form_keydown(keycode As Integer, shift As Integer)
If keycode = 17 Then '17是Ctrl键的值
   
End If
If keycode = 18 Then '18是Alt键的值
   
End If
End Sub
以上是我为command1和command2所设的快捷键,现在有个问题就是当程序打开时按"Ctrl"和"Alt"键会立即起作用,但第二次再按时就不灵活了;
发现出现这样一种现象,在光标改变位置的情况下快捷键是起作用的,如果光标一直处在同一位子,这两个快捷键就要都多按一遍才会起作用。
不知是什么问题?求指点。
11 回复
#2
Artless2013-06-08 19:36
没看明白
#3
snrtjat2013-06-08 19:57
在command1和command2控件中都有不同的执行过程,我想通过快捷键ctrl来代替点击command1动作,快捷键Alt来代替点击command2动作
现在的问题是当程序打开时按"Ctrl"和"Alt"键会立即起作用,但第二次再按时就不灵活了;
是什么原因?
#4
bczgvip2013-06-08 20:27
可以用菜单快捷键并隐藏菜单。
#5
风吹过b2013-06-08 21:40
控件的焦点问题。
#6
lowxiong2013-06-08 22:24
把form的keypreview属性设为true,不管焦点在窗口的哪个控件上都首先相应窗口的键事件。
#7
snrtjat2013-06-10 09:41
首先在这里谢谢各位版主的解答。
我将form的keypreview属性设为true也没有起到作用?
我又重新改变光标的位子,也是没有起到作用的。
Form1.Text2.SelStart = 0
Form1.Text2.SetFocus

该如何处理,求指点……
#8
风吹过b2013-06-10 10:50
当窗体上有 控件能获得焦点,如文本框、按钮 等,那么
这个 form_keydown 事件就不会被发生。

我记得好像是这样的。

那么需要你在所有的控件的 键盘事件 中调用这个 处理 的过程,以达到不管焦点在那个控件上,都能达到响应的目的。
#9
snrtjat2013-06-10 11:04
风老师,对就是你说的这种,焦点在textbox上。

需要在所有的控件的 键盘事件 中调用这个 处理 的过程,以达到不管焦点在那个控件上,都能达到响应的目的。
这一步我不知道该如何实现,请指点一下,谢谢!
#10
lowxiong2013-06-10 16:32
首先keypreview属性设为true,其次你的的调用方式是错误的,除非你的form1的commnd1的click事件是public(默认都为private)。我反复实验,非常灵活的,见附件。
只有本站会员才能查看附件,请 登录
#11
snrtjat2013-06-10 17:11
找到解决方法了,现说明如下,如有问题,请指正:
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer  '声明

Private Sub Form_Load()
  Timer1.Interval = 50
End Sub

Private Sub Timer1_Timer()
'当按下Ctrl键时激活command1
If GetAsyncKeyState(17) <> 0 Then
   
End If
'当按下Alt键时激活command2
If GetAsyncKeyState(18) <> 0 Then
   
End If
End Sub

#12
snrtjat2013-06-10 20:39
谢谢10楼的认真解答,不错form1的commnd1的click事件是public
你说的很对.
1