我先做一个Form1主窗体,上面放两个label1和label2,当点击键盘上的 1 键 弹出Form2窗体,当点击键盘上的 2 键 弹出Form3窗体,
主要代码如下:
        Form2 f2;
        Form3 f3;
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {            if (e.KeyValue == 49)
                label1_Click(this,e);
            if (e.KeyValue == 50)
                label2_Click(this,e)
        }
        private void label1_Click(object sender, EventArgs e)
        {
            f2 = new Form2();
            f2.Show();
        }
        private void label2_Click(object sender, EventArgs e)
        {
            f3 = new Form3(f2);
            f3.Show();
        }
这么做调试可以成功.
但是当我想在Form1窗体中  加一个BUTTON后, 当点键盘上的 3键 关闭整个窗体.
        Form2 f2;
        Form3 f3;
        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {            if (e.KeyValue == 49)
                label1_Click(this,e);
            if (e.KeyValue == 50)
                label2_Click(this,e)
            if (e.KeyValue == 51)
                button1_Click(this,e)
        }
        private void label2_Click(object sender, EventArgs e)
        {
            f2 = new Form2();
            f2.Show();
        }
        private void label3_Click(object sender, EventArgs e)
        {
            f3 = new Form3(f2);
            f3.Show();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.close;
        }
这样做的时候,运行后,按键盘上的 1   2  等键程序没反应.高手来指导啊.谢谢

解决方案 »

  1.   


                if (e.KeyValue == 51) 
                    button1_Click(this,e) 这句可以不要直接将button1_Click加到button1上点击的时候就会执行click事件的
      

  2.   

    设置窗体Form1的属性KeyPreview = true; 看看.
      

  3.   

     想不通你为什么要加label1_Click呢?直接写f2 = new Form2(); 
                f2.Show(); 不行吗?看下你的代码 private void Form1_KeyDown(object sender, KeyEventArgs e) 
            {             if (e.KeyValue == 49) 
                    label1_Click(this,e); 
                if (e.KeyValue == 50) 
                    label2_Click(this,e) 
                if (e.KeyValue == 51) 
                    button1_Click(this,e) 
            } 
            private void label2_Click(object sender, EventArgs e) 
            { 
                f2 = new Form2(); 
                f2.Show(); 
            } 
            private void label3_Click(object sender, EventArgs e) 
            { 
                f3 = new Form3(f2); 
                f3.Show(); 
            } 
    和你的要求不符...
      

  4.   

    1楼你好,点击BUTTON的确可以关闭.但是这个时候你点击1和2键,FORM1和FORM2窗体打不开了
      

  5.   

    是我写错了,在下面的还是label1和label2
      

  6.   

              if (e.KeyValue == 49) 
                    label1_Click(null,null); 
                if (e.KeyValue == 50) 
                    label2_Click(null,null) 
                if (e.KeyValue == 51) 
                    button1_Click(null,null) 
      

  7.   

    因为按下键盘的消息被button截走了,而不是在被Form获得。
      

  8.   

    你上面用的是label1和label2
    下面用的是label2和label3
    当然没用啦……
      

  9.   

    你的代码的冗余量太多!
     private void label2_Click(object sender, EventArgs e) 
            { 
                f2 = new Form2(); 
                f2.Show(); 
            } 
    不知道你加上lable事件什么意思?冗余!直接调用的的btn的事件,在btn事件中写东西就可以了里面写上上cordrol有提示的遍历整个窗体,先判断窗体是否打开,activeForm,如果是打开的就关闭,就可以了!不用加那么多冗余的代码!
    你的OOP思想没有领会!注意多家学习,程序员是要领会思想的!OK