Form.KeyPreview=true后,我发现在Form上的控件之间使用left.right等键变换焦点的时候Form并不能接收到left/right键。有没有什么办法可以在空间之间变换焦点时捕捉?或者怎样让Form上的控件永远得不到焦点。我用的vs2005.

解决方案 »

  1.   

    这些事件是在窗体类,OnKeyDown,OnKeyUp,OnKeyPress函数里去触发的事件。这些函数,是在窗体类的WndProc里调用的函数。WndProc只处理属于自己的消息。如果你当前焦点不在。可能就无法接收(可能,我不肯定)你可以使用这样:form_load()
    {
       Application.AddMessageFilter(new myMsgFilter());
    }...public class myMsgFilter : IMessageFilter
    {
    bool IMessageFilter.PreFilterMessage(ref Message m)
    {
    if (m.Msg == WM_KEYDOWN)//WM_KEYDOWN自己定义一下
    {
    //这里写键盘响应的代码。
    }
    return OnPreFilterMessage(ref m);
    }
    }
      

  2.   

    实践证明,我这样做可行的。public class myMsgFilter : IMessageFilter
    {
    public const int WM_KEYDOWN = 0x100;
    public bool PreFilterMessage(ref Message m)
    {
    if (m.Msg == WM_KEYDOWN)
    {
    if (m.WParam == (IntPtr)9)
    {
    return true;
    }
    }
    return false;
    }
    }
    然后
    private void Form1_Load(object sender, System.EventArgs e)
    {
    Application.AddMessageFilter(new myMsgFilter());
    }整个程序里Table都没用了。