我在窗体上建了2个button!想通过键盘上下键控制,如按上键相当于鼠标点击button1,下键相当于鼠标点button2在窗体的keydown事件里我写好了代码,确发现上下键是切换这2个button的焦点,即切换获取焦点。并不是我要的效果。这是为什么啊?

解决方案 »

  1.   

    在KeyDown里加上button1.PerformClick()试试。。或者直接调用方法button1_Click(null,null)
      

  2.   

    好像在Form_KeyPress里写代码就可以了
    if((key)e.KeyChar==Keys.a)u
    {
      button1_Click(sender,e);
    }
      

  3.   

    if((key)e.KeyChar==Keys.Up)

      button1_Click(sender,e); 
    }
    if((key)e.KeyChar==Keys.Down)

      button2_Click(sender,e); 
    }
      

  4.   

    我发现我的程序的焦点一直在button上,窗口的keydown事件还是不响应
      

  5.   

    重写 WndProc窗体消息事件,不要直接用form上的事件,不灵光的。
      

  6.   

    protected override void ProcessCmdKey(ref Message message, Keys keyData)
    {
        switch(keyData)
        {
             case Keys.Up:
                    // .....
                break;
         }
    }
      

  7.   

    在public class form1:form
    {
           是在这里这里重写吗?
    }
      

  8.   

    你说的wndproc是不是就是那个Callback,你别调用我,我来调用你!窗口过程函数,回调函数吗?消息循环这里怎么成了事件了
      

  9.   

    是不是C#自己维护一个消息循环,把消息封装在类里,当发生WM_KEYDOWN消息后,窗口过程函数将这个消息寄送给给封装的方法来处理。就象委托的事件来处理,大概是这样的吗?
      

  10.   

    别想那么复杂,windows把消息发给窗体,窗体接受到了要处理,那就写个函数来做,这就是事件。
    事件其实就是个委托,接收到消息了,就把这个消息处理一下,这个处理函数就是委托机制的。
    这个函数直接写到form的类里面就行了,网上搜索一下好多例子的。上面那个wndproc是处理所有消息的,ProcessCmdKey这个是处理key消息的。