C#如何正确删除事件处理程序代码?

时间:2015-03-19 17:23:29

标签: c# .net winforms visual-studio visual-studio-2013

我想从我的C#Winform中删除keyup事件:

private void txtInputBox_KeyDown(object sender, KeyEventArgs e)
{
      if (e.KeyCode == Keys.Return)
      {
          cmdSend.PerformClick();
      }
  }

如果我注释掉或删除此功能,我在表单的设计视图中出现错误:

  

"设计师无法处理未知名称&t; txtInputBox_KeyDown'在   第66行。方法中的代码' InitializeComponent'生成   由设计师,不应手动修改。请删除任何   更改并再次尝试打开设计师。"

该程序也不会编译。

如果我尝试删除表单上的任何事件处理程序代码,就会发生这种情况。我在VB.NET和VB.NET的背景下教自己C#我可以毫无问题地删除事件处理程序代码。

3 个答案:

答案 0 :(得分:3)

这是因为在 Designer.cs 中注册了事件处理程序,并且只是从它背后的代码中删除它时,它不会从 Designer.cs

您应该通过控制属性从表单设计器视图中删除事件,以便不会出现此问题,或者从 Designer.cs 删除事件注册行,如下所示:

SomeTextBox.KeyUp += SomeTextBox_KeyUp

答案 1 :(得分:3)

那是因为在C#中,当您在设计器中添加函数时,设计师会以编程方式将这些函数添加到事件中。

在解决方案资源管理器窗口中,展开Form1.cs并在那里打开Form1.Designer.cs文件:

enter image description here

然后找到函数:

private void InitializeComponent()

并删除将事件处理程序注册到事件的行。它会在中间有一个+=运算符,如下所示:

enter image description here

您的活动将位于第66行,如下所示:

this.txtInputBox.KeyDown += new System.EventHandler(this.txtInputBox_KeyDown);

答案 2 :(得分:2)

在Visual Studio自动生成的设计器代码中,事件仍然链接到这个不存在的函数。

在解决方案资源管理器中,找到您的Form.Designer.cs文件(它位于主Form.cs下的子节点中),或使用Find in Solution函数查找显示

的行。
txtInputBox.KeyDown += new System.EventHandler(txtInputBox_KeyDown);

删除该行,它应该再次起作用。