Form上的工具栏按钮 保存  this.Save.Click += new System.EventHandler(this.Save_Click);
  private void Save_Click(object sender, EventArgs e)
  {
    do somanythings......
  }
form的keyDown 截获CTR+S 也做do so manythings        private void C11020010_KeyDown(object sender, KeyEventArgs e)
        {
            if ((Control.ModifierKeys & Keys.Control) != 0 && e.KeyCode == Keys.S)
            {
                MessageBox.Show("Ctrl + S");
                if (Save.Enabled == true && Save.Visible == true)
                 {
                       do somanythings...... 
                 }
            }         }
期望结果 :  有一种很直接的办法直接去掉  private void Save_Click我知道想法邪恶了一些 
不过提取save中的do so manything  会改很多别的地方代码  
纠结呐

解决方案 »

  1.   

    那就来个更邪恶的,直接调用。当然,这个要求你没在do里面没有用到按钮控件和事件e。 private void C11020010_KeyDown(object sender, KeyEventArgs e)
            {
                if ((Control.ModifierKeys & Keys.Control) != 0 && e.KeyCode == Keys.S)
                {
                    MessageBox.Show("Ctrl + S");
                    if (Save.Enabled == true && Save.Visible == true)
                     {
                           this.Save_Click(null, null);
                     }
                }         }
      

  2.   

    this.Save.Click += new System.EventHandler(this.Save_Click);这句直接改成委托的形式具体写法有点忘了,好像是=>{}这个类型就不用再去用这个方法了
      

  3.   

    委托
    public delegate void ClickHandle();//定义一个委托(此委托未传参,你可以根据需要传参和修改返回值)
    public event ClickHandle Save_Click;调用的时候
    if(Save_Click!=null){
      Save_Click();
    }
      

  4.   


    this.Save.Click += delegate(){  do something .... };
    委托形式是这样
    可是用匿名函数
    do something  在我注册CTRL+S的时候 还要再写一遍
    非常感谢 楼上各位