Winform对象在修改布局时删除了事件订阅

本文关键字:事件 删除 对象 修改 布局 Winform | 更新日期: 2023-09-27 18:00:15

所以我在FormMain.cs中添加了一个BackGroundWorker对象,并创建了两个方法来处理事件ProgressChangedRunWorkerCompleted。我发现我必须进入ForMain.Designer.cs才能手动将方法连接到事件。。

this.bgWorker.WorkerReportsProgress = true;
this.bgWorker.WorkerSupportsCancellation = true;
this.bgWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.bgWorker_DoWork);
this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;

令人困惑的是,如果我更改了FormMain.Designer.cs上的任何控件,那么我创建的两个连接事件就会被删除,我必须手动将它们添加回来。这包括在设计器上移动控件。知道为什么会发生这种事吗?

这些必须手动添加回

this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;

Winform对象在修改布局时删除了事件订阅

设计器文件仅供设计器使用-在设计器中进行更改时,它将被撕毁并重新写入。InitializeComponent:上面通常有这样的评论

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>

请注意,它说不要用代码编辑器修改内容。您应该通过设计器UI添加这些事件处理程序,或者将它们添加到代码隐藏文件(partial类的另一半)中。

例如,在调用InitializeComponent之后将它们添加到构造函数中:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
        this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
    }
}