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.
    }
}

説明:私はこのcheckbox1をmdiの子に持っていて、チェックすると別の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 フォームが 1 つしかないことを前提としています。


これを行うもう 1 つの方法は、check changed メソッドのスコープ外でフォーム変数を宣言することです。

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 に答える