2

我正在从另一个 mdi 孩子打开一个 MDI 孩子表单并且它正在工作,但现在我必须以同样的方式关闭它并且什么也没有发生。

这是我正在使用的代码示例:

private void checkbox1_CheckedChanged(object sender, EventArgs e)
{

    Form1 newForm1 = new Form1();
    newForm1.MdiParent = this.MdiParent;

    if (checkbox1_CheckedChanged.Checked == true)
    {
        newForm1.Show(); //this is working
    }
    else
    {
        newForm1.Dispose(); //this is not working. I have tryed .Close(), .Hide()... unsucessfully.
    }
}

解释:我在一个 mdi 子级中有这个 checkbox1,当它被选中时,另一个 mdi 子级(newForm1)将打开,当它未选中时,这个 mdi 子级(newForm1)将关闭、隐藏或类似的东西。

有什么建议么?谢谢!

4

2 回答 2

2

您需要在表单集合中“找到”表单才能处理它:

private void checkBox1_CheckedChanged(object sender, EventArgs e) {
  if (checkBox1.Checked) {
    Form1 form1 = new Form1();
    form1.MdiParent = this.MdiParent;
    form1.Show();
  } else {
    Form found = this.MdiParent.MdiChildren.Where(x => 
                 x.GetType() == typeof(Form1)).FirstOrDefault();
    if (found != null) {
      found.Dispose();
    }
  }
}

这假定集合中只有一个 Form1 表单。


另一种方法是在检查更改方法范围之外声明表单变量:

Form1 form1;

private void checkBox1_CheckedChanged(object sender, EventArgs e) {
  if (checkBox1.Checked) {
    if (form1 == null || form1.IsDisposed) {
      form1 = new Form1();
      form1.MdiParent = this.MdiParent;
      form1.Show();
    }
  } else {
    if (form1 != null) {
      form1.Dispose();
    }
  }
}
于 2013-04-26T12:45:35.423 回答
0

在 Form1 中添加一个公共方法,例如:

Public void closeForm()
{
  Close();
 }

在您显示的代码中,而不是

 newForm1.Dispose()

这将是:

 newForm1.closeForm();
于 2013-04-26T12:08:27.450 回答