回 帖 发 新 帖 刷新版面

主题:窗体的keydown事件

书上例题要求按照上图,当按下键盘的某个键时,在窗体上显示所按键的码值。单击“清除”按钮时,可清除窗体上显示的文字。
书上代码如下:
Private Sub Command1_Click()
  Cls
End Sub

Private Sub Command2_Click()
  End
End Sub

Private Sub form_KeyDown(KeyCode As Integer, Shift As Integer)
Dim strTemp As String
    Select Case Shift
      Case 1
        strTemp = "按下了Shift键"
      Case 2
        strTemp = "按下了Ctrl键"
      Case 3
        strTemp = "按下了Shift和Ctrl键"
      Case 4
        strTemp = "按下了Alt键"
      Case 5
        strTemp = "按下了Shift和Alt键"
      Case 6
        strTemp = "按下了Ctrl和Alt键"
      Case 7
        strTemp = "按下了Shift、Alt、Ctrl键"
      Case Else
        strTemp = "KeyCode是:" & KeyCode
    End Select
    Print strTemp
End Sub
但在实际运行时是得不到预期效果的,无论按什么键窗体上都没有任何显示。后来发现,如果把窗体上这一个文本框和两个命令按钮(含命令按钮的代码)全删除,则能运行出来效果!
问题:为什么会这样?(哪怕是只放一个命令按钮在窗体上都没有办法显示结果)

回复列表 (共4个回复)

沙发

我一般使用KeyUp事件,因为同时按住两个获两个以上的键时,我们一般做不到同时,一般先按下Ctrl、Alt、Shift键后再按其他键

板凳

哪怕是只放一个命令按钮在窗体上都没有办法显示结果


你看一下你的窗体的
 KeyPreview属性是否设置为True:优先激活窗体对象上的键盘事件,即窗体键盘事件在
窗体对象上的控件的键盘事件之前激活

属性为False时,优先激活窗体对象上的控件的键盘事件,vb默认为此值

3 楼

二楼正解

4 楼

[quote]


你看一下你的窗体的
 KeyPreview属性是否设置为True:优先激活窗体对象上的键盘事件,即窗体键盘事件在
窗体对象上的控件的键盘事件之前激活

属性为False时,优先激活窗体对象上的控件的键盘事件,vb默认为此值[/quote]
我觉得的确是因为窗体没有获得焦点

我来回复

您尚未登录,请登录后再回复。点此登录或注册