簡體   English   中英

C# 如何正確刪除事件處理程序代碼?

[英]C# How to properly remove event handler code?

我有一個要從 C# Winform 中刪除的keyup事件:

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

如果我注釋掉或刪除這個函數,我會在表單的設計視圖中得到一個錯誤:

“設計器無法處理第 66 行的未知名稱 'txtInputBox_KeyDown'。方法 'InitializeComponent' 中的代碼由設計器生成,不應手動修改。請刪除任何更改,然后再次嘗試打開設計器。”

該程序也不會編譯。

如果我嘗試刪除表單上的任何事件處理程序代碼,就會發生這種情況。 我正在從我在 VB.NET 和 VB.NET 的背景中自學 C#,我可以毫無問題地刪除事件處理程序代碼。

這是因為在Designer.cs中注冊了事件處理程序,當您只是從其方法后面的代碼中刪除時,它不會從Designer.cs 中刪除它的事件注冊

您應該通過進入控件屬性從表單設計器視圖中刪除事件,以便此問題不會出現或來自Designer.cs刪除事件注冊行,如下所示:

SomeTextBox.KeyUp += SomeTextBox_KeyUp

那是因為在 C# 中,當您將其添加到設計器中時,設計器以編程方式將函數添加到事件中。

在解決方案資源管理器窗口中,展開Form1.cs並在Form1.Designer.cs打開Form1.Designer.cs文件:

在此處輸入圖片說明

然后找到函數:

private void InitializeComponent()

並刪除將事件處理程序注冊到事件的行。 它將在中間有一個+=運算符,如下所示:

在此處輸入圖片說明

您的事件將位於第 66 行,如下所示:

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

在 Visual Studio 自動生成的設計器代碼中,事件仍然鏈接到這個不存在的函數。

在解決方案資源管理器中,找到您的 Form.Designer.cs 文件(它位於主 Form.cs 下的子節點中),或使用“在解決方案中查找”功能找到顯示

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

刪除該行,它應該會再次工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM