在做俄罗斯方块
事件有4个 Load KeyDown KeyUp Paint    单独拿一个窗体做触发事件是可用的//里面的窗体事件不知道为什么触发不了
 private void frmMain_KeyDown(object sender, KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Up:
                    State = Direction.up;
                    break;
                case Keys.Down:
                    State = Direction.down;
                    break;
                case Keys.Left:
                    State = Direction.left;
                    break;
                case Keys.Right:
                    State = Direction.right;
                    break;
            }
        }

解决方案 »

  1.   

    hook??    '    Private Sub hk_HookEvent(ByVal e As HookCe.HookEventArgs, ByVal keyBoardInfo As HookCe.KeyBoardInfo)     '数据处理程序
        '        Select Case CInt(e.wParam)   '
        '            Case 256 '按下响应
        '                TextBox1.Text += keyBoardInfo.vkCode.ToString()
        '                Exit Select
        '            Case 257
        '                Exit Select
        '            Case Else
        '                Exit Select
        '        End Select
        '    End Sub
      

  2.   


        '    Public Sub Hk_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs)
        '         Select Case e.KeyData
        '             Case Keys.F10
        '                 Me.Hide()
        '             Case Keys.F9
        '                 Me.Visible = True
        '                 Me.Top = 200
        '             Case Keys.F8
        '                 Hk_Xp.StopHook()
        '                 Me.Close()
        '         End Select
        '        BeginInvoke(New EventHandler(AddressOf TSCL_Ce), e.KeyValue)  
        '可以直接处理,只是异步安全调用 --便于返回-执行别的事件
        '    End Sub
      

  3.   


     '-------勾子按键的处理-STA
        Sub TSCL_Ce(ByVal KeyV As System.Object, ByVal e As System.EventArgs)
            Dim KeyValue As Integer = Val(KeyV.ToString)   '按键的键值 
            If KeyValue = Keys.T Then    '要保留1-9 A-F , 用于调试器输入十六进制数据及空格
                'T 隐藏窗体,再按显示窗体。
                If Me.Visible = True Then
                    Me.Visible = False
                Else                '--------任务栏及程序窗口的显示--STA
                    If Win_Xp_bz = False Then '是WINCE系统
                        Ce_showtaskbar()
                    Else
                        Xp_showtaskbar()
                    End If
      

  4.   

    hook没知道,触发控件的keydown、keyup事件之类的就知道
      

  5.   

    我就是键盘keydown keyup触发事件 不知道为什么失效了
      

  6.   

    那是因为你输入焦点在窗体的子控件上,办法是keypreview设成true就可以了 
      

  7.   

    楼上正解  窗体属性里要先设置监听的属性的  就是 KEYPREVIEW
      

  8.   

    恩,因为有控件遮挡在你的窗口之上,你需要preview控件的消息,所以你需要allow preview,然后在previewKeyDown/Up中做出相应的处理。
    这是一个message route的问题,呵呵
      

  9.   

    谢谢大家热心帮忙问题完美解决了
    原来的keydown事件被按钮屏蔽了
      加个重载就好了。protected override bool ProcessDialogKey(Keys keyData)
    {
            switch(keyDate)
            { 
                case keys.up:
                break;
            }        return false;
    }