.net winform


winform 程序中响应键盘事件1

在winform程序中给form添加了keyup事件,但是程序却不响应键盘事件,解决办法是重写Form基类的ProcessCmdKey(ref Message msg, Keys keyData)方法。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
       {
           if (keyData == Keys.F4)
           {
               FormFastHitStates form = new FormFastHitStates();
               form.ShowDialog();
           }
            
           return true;
           //return base.ProcessCmdKey(ref msg, keyData);
       }

将Form类的属性KeyPreview设置为ture

winform键盘事件的响应2

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

        {
            switch (keyData)

            {
                case Keys.Right:

                    MessageBox.Show("Right");

                    break;

                case Keys.Left:

                    MessageBox.Show("Left");

                    break;

                case Keys.Up:

                    MessageBox.Show("up");

                    break;

                case Keys.Down:

                    MessageBox.Show("down");

                    break;

                case Keys.Space:

                    MessageBox.Show("space");

                    break;

                case Keys.Enter:

                    MessageBox.Show("enter");

                    break;

            }

            //return false;//如果要调用KeyDown,这里一定要返回false才行,否则只响应重写方法里的按键.

            //这里调用一下父类方向,相当于调用普通的KeyDown事件.//所以按空格会弹出两个对话框

            //return base.ProcessCmdKey(ref msg, keyData);

             return true;//这里return true 否则控件焦点会跟着方向键改变

        }

第一种:重载ProcessCmdKey方法,直接在winform程序中加入这个就可以了

 protected   override   bool   ProcessCmdKey(ref       System.Windows.Forms.Message   msg,   System.Windows.Forms.Keys   keyData)  
                  {  
                          if   (keyData   ==   (Keys.Control   |   Keys.N))  
                          {   
                                 MessageBox.Show("按下了Control+N")
                                  return   true;  
                          }   
                          return   base.ProcessCmdKey(ref       msg,   keyData);  
                  }

第二中方法:

在form的keydown事件中捕捉按钮事件,程序如下,

需要注意:form的KeyPreview 属性设置为true,否则捕捉不到事件

#region 快捷键
        private void PhoneForm_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Control && e.KeyCode == Keys.S)
            {
                Control[] controls = this.pCallList.Controls.Find("recorder",true);
                if (controls.Length > 0)
                {
                    ((CallRecorder)controls[0]).btnSave_Click(null, null);
                }
            }
            else if (e.Control && e.KeyCode == Keys.P)
            {
                Control[] controls = this.pCallList.Controls.Find("recorder", true);
                if (controls.Length > 0)
                {
                    ((CallRecorder)controls[0]).btnSend_Click(null, null);
                }
            }
            else if (e.Control && e.KeyCode == Keys.T)
            {
                foreach (Control call in panelCalls.Controls)
                {
                    if (call is UserCall)
                    {
                        if (((UserCall)call).isTalking)
                        {
                            ((UserCall)call).btnHangupCall_Click(null, null);
                        }
                        else
                        {
                            ((UserCall)call).btnAcceptCall_Click(null, null);
                        }
                      
                    }
                }
            }

        }
        #endregion

winform键盘事件的响应3

想要实现点击键盘触发事件更改值首先我们需要更改一个属性

KeyPreview这个属性 ,我们需要将这个属性改为True 这个属性默认时False , 当这个属性为False的时候,我们时不能实现点击键盘触发事件的

 然后我们在事件里面找到KeyDown

 键盘按键的键码值

当我们给KeyDown声明了一个方法之后,我们就需要你点击的按键的值

当上述都完成之后,我们就可以进行按下键盘键位之后的想要的任何操作啦,例如

private void Form2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.S && e.Control) // 按下ctrl和s时
            {
                MessageBox.Show("我是ctrl+s,我想要保存数据");
 
            }
 
    }

winform程序在初始化时窗口最大化

this.WindowState = System.Windows.Forms.FormWindowState.Maximized;