C# 防止在每个ShowDialog上加载事件
父窗体只包含一个按钮“打开第二个窗体”onclick事件C# 防止在每个ShowDialog上加载事件,c#,winforms,showdialog,C#,Winforms,Showdialog,父窗体只包含一个按钮“打开第二个窗体”onclick事件 private void Parent_Click(object sender, EventArgs e) { ChildForm _chld = new ChildForm(); _chld.ShowDialog(); } private void ChildForm_Load(object sender, EventArgs e) { textBox1.
private void Parent_Click(object sender, EventArgs e)
{
ChildForm _chld = new ChildForm();
_chld.ShowDialog();
}
private void ChildForm_Load(object sender, EventArgs e)
{
textBox1.Text = "This is Child Form";
}
private void Ok_Click(object sender, EventArgs e)
{
this.Hide();
}
子窗体包含文本框、确定按钮和确定按钮的子窗体加载、子窗体单击事件
单击“打开第二个表单”按钮,将打开文本框中包含“这是子表单”内容的子表单
这里我的场景是这样的
当我第一次点击OpenSecondForm时,它会在文本框中打开包含“这是子表单”内容的子表单。我将文本框更改为“这是父表单”,然后确定
但当我再次单击“打开第二个表单”按钮时,文本框中的文本显示的是旧文本“这是子表单”,而不是更改的文本“这是父表单”。该值未保留在文本框中
我认为每个showdialog()都会触发加载事件。是否有办法防止第二次加载事件。您每次都在创建一个新表单,因此将显示默认值。我猜您只希望显示一个子表单,因此将变量移动到父表单的作用域:
ChildForm _chld = new ChildForm();
private void Parent_Click(object sender, EventArgs e)
{
_chld.ShowDialog();
}
确保在父窗体关闭时也处理该子窗体:
protected override void OnFormClosing(FormClosingEventArgs e) {
_chld.Dispose();
}
Load事件仍将激发,因此只需删除您的行或将其移动到构造函数:
public ChildForm() {
this.InitializeComponent();
this.textBox1.Text = "This is Child Form";
}