我要在类中写一个鼠标按下事件Test_MouseDown
我要先在类的构造函数中注册
public class Test
{
    public Test()
    {
       this.MouseDown +=new MouseEventHandler(Test_MouseDown);
     }
}
这个可以,因为写上面那条语句的时候this点,就可以点出MouseDown来我现在是要实现键盘按下事件,也这样实现,可是this.的时候只有OnKeyDown,是个方法组,不能像上面那样.
我现在就是要在一个类中判断哪一个键是否按下 
怎么实现???在线等高手......

解决方案 »

  1.   

    截获Windows消息,来进行判断!
      

  2.   


    protected override void WndProc(ref Message m)  
    {  
    截获Windows消息
    }
      

  3.   

    例如要判断Ctrl是否按下
    要怎么写
    写出代码
      

  4.   


    if(ctrl按下)
    {
      ////代码
    }
      

  5.   

    OnKeyDown,是个方法组 可以用e.KeyChar来确定是哪个键按下啊
      

  6.   

    this.KeyDown+=new KeyEventHandler(form1_KeyDown);
    if ((e.Modifiers & Keys.Control) == Keys.Control)
    只不过,若Form上还有控件的话,按钮事件只会发送给拥有焦点的控件。可以把Form的KeyPreview属性设为true。
      

  7.   


    if((int)e.keyChar == 2)
    {
    //你要的代码
    //2貌似是Ctrl的键值
    }
      

  8.   

    我这个类是基于Panel的 
    this点不出KeyDown来
      

  9.   

    没有啊 这个类基于panel base也点不出来啊
      

  10.   

    基于Panel是什么意思?派生?
    派生可以改写OnKeyDown方法的,在这个方法中判断也是一样的。
      

  11.   


    private void txtData_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.Control && e.KeyCode == Keys.A)
                    MessageBox.Show("Ctrl+A");
                if (e.Alt && e.KeyCode == Keys.A)
                    MessageBox.Show("Alt+A");
                if (e.Shift && e.KeyCode == Keys.A)
                    MessageBox.Show("Shift+A");
            }
      

  12.   

    protected override void WndProc(ref Message m)
    {
    if ((int)m.WParam == WM_DEVICEARRVIAL)
    {
    }
    base.WndProc(ref m);
    }
    private void Form1_KeyDown(object sender, KeyEventArgs e)
      {
      switch (e.KeyCode)
      {
      case Keys.A: break;
      case Keys.B: break;
      case Keys.Enter:  
      A(sender, e); break;   
      }
      }  
      

  13.   

    重写OnKeyDown,检验keycode,keymodifer