程序界面上有一个panel,用来画画,画画用键盘控制。如果界面上没有其他控件,则form拥有焦点,我在form的keyDown里处理。当在界面上有其他可接受焦点的控件时,form则再也接收不到keydown事件了。这应该怎么办?

解决方案 »

  1.   

    参考窗体的 
    ProcessKeyMessage
    ProcessCmdKey
    WndProc
      

  2.   

    非焦点的情况 好象做不到吧?难道要焦点判断?当textBox1 焦点的时候  textBox1 里面 将键盘的输入 记录 然后 写进  textBox2里面?这样?   晕... 我是小菜鸟!   说的不好清见谅,   希望能够帮到你!
      

  3.   

    不是这样的。是我说的不清楚吗?那来个实例吧:在一个窗体上,有一个按钮和panel。要求点击按钮后,我按空格键或上下左右键后,panel上都给我画出一个矩形。
    请考虑,如果我的窗体上不止一个按钮,还有几个textBox,你的方法的适用吗。
      

  4.   


    private void button1_Click(object sender, EventArgs e)
    {
    .......................
    panel1.Focus();
    }
      

  5.   

    1.监视form_keypress事件,响应控件事件
    2.监视prowmc事件
    3.可以挂钩子
      

  6.   

    6楼的,Focus()方法根本不行。我早就试过了。
    7楼的,你说的prowmcGoogle都搜不到相关信息,让我这菜鸟怎么用?能不能详细一点?
      

  7.   

    搜一下WINAPI消息,或钩子函数。
      

  8.   

    画的时候把其他空间enable=false掉 是我以前找到的一个比较苯的办法 暂时还没找到更好的 如果这个办法不影响你的程序 可以试试panel的 tabindex改成0 试下 我临时想到的 没试过
    关注此贴  我也想找到更好的办法
      

  9.   

    画的时候把其他空间enable=false掉 是我以前找到的一个比较苯的办法 暂时还没找到更好的 如果这个办法不影响你的程序 可以试试panel的 tabindex改成0 试下 我临时想到的 没试过
    关注此贴  我也想找到更好的办法
      

  10.   

    bool blnStartDraw = false;
    private void button1_Click(object sender, System.EventArgs e)
    {
    blnStartDraw = true;
    } private void button2_Click(object sender, System.EventArgs e)
    {
    blnStartDraw = false;
    } const int WM_KEYDOWN  = 0x100; protected override bool ProcessCmdKey(
    ref Message msg,
    Keys keyData
    )
    {
    if (msg.Msg == WM_KEYDOWN) 
    {
    if (blnStartDraw == true)
    {
    Graphics g = this.panel1.CreateGraphics();
    g.DrawRectangle(System.Drawing.Pens.Red, 10, 10, 100, 100);
    g.Dispose();
    return true;
    }
    }
    return base.ProcessCmdKey(ref msg, keyData);
    }