我正在从另一个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 child(newForm1)将被打开,当它被取消选中时,这个mdi child(newForm1)将关闭,隐藏或类似的东西。
有什么建议吗? 谢谢!
答案 0 :(得分: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();
}
}
}
答案 1 :(得分:0)
在Form1中添加一个公共方法,如:
Public void closeForm()
{
Close();
}
在您显示的代码中,而不是
newForm1.Dispose()
这将是:
newForm1.closeForm();