0

场景是:

  • 我有一个X在项目 A 中调用的按钮
  • 事件之一X如下:

    private void X_KeyDown(object sender, KeyEventArgs e)
    {//if the user presses Ctrl + V 
        if (e.KeyCode == Keys.Control && e.KeyCode == Keys.V)
        {
          MessageBox.Show("hello");  
        }
    }
    
  • 我现在创建了一个新项目 B 并在表单中添加了一个按钮并将其命名为X。然后我将上面的代码复制到Form1.cs.

问题:如果我转到表单 B 并选择按钮,然后双击该KeyDown事件,它不会转到我复制的代码,但会创建以下内容。为什么 ?

private void X_KeyDown_1(object sender, KeyEventArgs e)
{

}
4

1 回答 1

1

因为您忽略了复制Form1.Designer.cs文件中声明的实际事件绑定。就像是

X.Click += new System.KeyDownEventHandlerEtcEtc;

因为缺少这个,工作室认为您正在尝试创建一个新的事件处理程序。但是因为该事件处理程序的默认名称附加在_1.

为了克服这个问题,您可以将Click设计器中的事件手动设置为指定的复制事件处理程序。或者实际上任何具有匹配签名的事件处理程序。

另一种方法是不复制整个事件处理程序,而只复制逻辑 - 然后在您的新表单中创建一个新处理程序,将逻辑粘贴到那里。

于 2012-07-19T12:37:24.407 回答