[英]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.