【问题标题】:Preventing Load event on every ShowDialog防止每个 ShowDialog 上的 Load 事件
【发布时间】:2014-08-06 04:26:07
【问题描述】:

ParentForm 仅包含它调用的一个按钮“打开第二个表单”onclick 事件

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();
    }

子窗体包含文本框、确定按钮和确定按钮的 ChildForm_Load、Child_Click 事件。

点击“打开第二个表单”按钮后,它会在文本框中打开子表单,内容为“这是子表单”。

这里我的场景是这样的,

当我第一次单击 OpenSecondForm 时,它会在文本框中打开 ChildForm,内容为“这是子表单”。我将文本框更改为“这是父表单”,然后确定。

但是当我再次单击“打开第二个表单”按钮时,文本框中的文本显示旧文本“这是子表单”,但没有更改文本“这是父表单”。该值未保留在文本框中。

我认为每个 showdialog() 都会触发 Load 事件。有什么办法可以防止第二次加载事件。

【问题讨论】:

    标签: c# winforms showdialog


    【解决方案1】:

    您每次都在创建一个新表单,因此会显示默认值。我猜你只想显示一个 ChildForm,所以将变量移动到父表单的范围:

    ChildForm _chld = new ChildForm();
    
    private void Parent_Click(object sender, EventArgs e)
    {
      _chld.ShowDialog();
    }
    

    确保在父级关闭时也处理掉该 ChildForm:

    protected override void OnFormClosing(FormClosingEventArgs e) {
      _chld.Dispose();
    }
    

    Load 事件仍会触发,因此只需删除您的行或将其移至构造函数:

    public ChildForm() {
      this.InitializeComponent();
      this.textBox1.Text = "This is Child Form";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多