我正在尝试使用MDI表单创建一个菜单驱动的应用程序。我的问题是MDI父级的菜单每次点击它都会创建一个新的孩子。我如何只允许特定表单的一个特定子项实例打开,但允许打开不同菜单中的多个表单。例如,我希望“File”中的一个孩子和一个“Edit”孩子一起打开。此外,有没有办法在新表单打开时关闭所有其他表单?
答案 0 :(得分:0)
您可以检查主表单的MdiChildren数组。该数组将列出表单上的所有打开的MDI子项。
您可以通过循环遍历数组并检查所请求类型的表单是否已打开来确定表单实例是否已打开。
要关闭所有打开的表单,只需循环浏览MdiChildren
并在所有表单上调用Close
。
答案 1 :(得分:0)
您可以通过MDIChildren集合检查表单的现有实例:
private void form2ToolStripMenuItem_Click(object sender, EventArgs e) {
Form2 f = this.MdiChildren.OfType<Form2>().SingleOrDefault();
if (f == null) {
f = new Form2();
f.MdiParent = this;
f.Show();
} else {
f.BringToFront();
}
}
如果您想要关闭之前的任何打开表单,您还可以直接浏览MDIChildren集合:
if (f == null) {
while (this.MdiChildren.Count() > 0) {
this.MdiChildren[0].Dispose();
}
// etc...