如题,VB中准备在FORM加上KEYDOWN事件,但不好用,并且keypreview已经设置为TRUE,现在还是一点反应没有,还有什么要修改的吗?

解决方案 »

  1.   

    这是我的KEYDOWN代码:
    Private Sub From_KeyDown(KeyCode As Integer, Shift As Integer)
    MsgBox KeyCode
        If KeyCode = Asc("A") And Shift = vbCtrlMask Then
         Command1_Click
         End If
    End Sub现在这个是CTRL+A。
      

  2.   

    这是我的KEYDOWN代码:
    Private Sub From_KeyDown(KeyCode As Integer, Shift As Integer)
    MsgBox KeyCode
        If KeyCode = Asc("A") And Shift = vbCtrlMask Then
         Command1_Click
         End If
    End Sub现在这个是CTRL+A。
      

  3.   

    Command1_Click 
    修改为
    Command1.value=true
      

  4.   


    Private Sub From_KeyDown(KeyCode As Integer, Shift As Integer) 
        
        Dim blnCtrlDown as Boolean
        blnCtrlDown = ((Shift And vbCtrlMask) > 0)    MsgBox KeyCode 
        If (KeyCode = vbKeyA) And (blnCtrlDown) Then 
           Command1_Click 
        End If End Sub
      

  5.   

    呵呵,现在有意思了,KeyDown还是不好用,但KeyPress是好用的,这是为什么啊?
    Private Sub From_KeyDown(KeyCode As Integer, Shift As Integer)
    'Dim blnCtrlDown As Boolean
        'blnCtrlDown = ((Shift And vbCtrlMask) > 0)
        Command1.Value = True
        
    MsgBox KeyCode
        If KeyCode = Asc("A") And Shift = vbCtrlMask Then
         Command1_Click
         End If
    End Sub
    Private Sub Form_KeyPress(KeyAscii As Integer)
    'MsgBox "按下了ctrl+enter键!"
              If KeyAscii = 10 Then
                      MsgBox "按下了ctrl+enter键!"
              End If
    End Sub
      

  6.   

    当窗体上有控件的时候,输入焦点就不会是form,所以你在form的keydown事件里写是没用的.你试试建一个空白的form再试试就应该可以了.
      

  7.   

    而keypreview可以使窗体先于任何控件捕捉到击键的,所以有效.但注意如果是空白窗体,会反过来,keypreview失效,keydown有效.
      

  8.   

    谢谢lsftest,我建了一个空白的窗体是好用了。但一般在实际的应该中,就是在当前应用程序上想判断比如按Ctrl+A会么什么事件里写呢?不是窗体的话,在什么里写呢,不会每个控件上面都要加处理吧。
      

  9.   

    Private Sub From_KeyDown(KeyCode As Integer, Shift As Integer) 
    改为
    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) 
      

  10.   


    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) '是form不是from
        
        Dim blnCtrlDown as Boolean 
        blnCtrlDown = ((Shift And vbCtrlMask) > 0)     MsgBox KeyCode 
        If (KeyCode = vbKeyA) And (blnCtrlDown) Then 
          Command1_Click 
        End If End Sub
      

  11.   


    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) '是form不是from
        
        Dim blnCtrlDown as Boolean 
        blnCtrlDown = ((Shift And vbCtrlMask) > 0)     'MsgBox KeyCode  最好去掉, 否则会影响双键的事件~~
        If (KeyCode = vbKeyA) And (blnCtrlDown) Then 
          Command1_Click 
        End If End Sub