Winform 对象在修改布局时删除了事件订阅
Winform object has event subscriptions deleted when modifying layout
所以我向 FormMain.cs
添加了一个 BackGroundWorker 对象,并创建了两个方法来处理事件 ProgressChanged
和 RunWorkerCompleted
。我发现我必须进入 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
上的任何控件,那么我创建的两个事件 wire-ups 将被删除,我必须手动将它们添加回去。这包括在设计器上移动控件。知道为什么会这样吗?
这些必须手动添加回去
this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
设计器文件仅供设计器使用 - 当您在设计器中进行更改时,它会被撕掉并重新编写。上面通常有这样的评论 InitializeComponent
:
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
注意它说不要用代码编辑器修改内容。您应该通过设计器 UI 添加这些事件处理程序,或者您应该将它们添加到代码隐藏文件中(partial
class 的另一半)。
例如,在调用InitializeComponent
之后在构造函数中添加它们:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
}
}
所以我向 FormMain.cs
添加了一个 BackGroundWorker 对象,并创建了两个方法来处理事件 ProgressChanged
和 RunWorkerCompleted
。我发现我必须进入 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
上的任何控件,那么我创建的两个事件 wire-ups 将被删除,我必须手动将它们添加回去。这包括在设计器上移动控件。知道为什么会这样吗?
这些必须手动添加回去
this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
设计器文件仅供设计器使用 - 当您在设计器中进行更改时,它会被撕掉并重新编写。上面通常有这样的评论 InitializeComponent
:
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
注意它说不要用代码编辑器修改内容。您应该通过设计器 UI 添加这些事件处理程序,或者您应该将它们添加到代码隐藏文件中(partial
class 的另一半)。
例如,在调用InitializeComponent
之后在构造函数中添加它们:
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
this.bgWorker.ProgressChanged += bgWorker_ProgressChanged;
this.bgWorker.RunWorkerCompleted += bgWorker_RunWorkerCompleted;
}
}