Mdi Child形成单个实例
本文关键字:单个 实例 Child Mdi | 更新日期: 2024-09-26 00:07:36
我正在c#中制作一个MDI Windows窗体应用程序,我正在尝试使MDI子窗体在单个实例中打开。我在一个新项目的button_click事件中使用这个示例代码只是为了测试目的,它在那里运行得很好,但当我在主项目中实现这个代码时,它什么也没做。我提供了与测试项目完全相同的条件,但它不起作用。我就是不明白为什么。
两个窗体都具有相同的MDI父级。Form1与MDI父级一起加载。
Form1中用于打开Form2:的按钮点击事件
private void button1_Click(object sender, EventArgs e)
{
if (System.Windows.Forms.Application.OpenForms["Form2"] as Form2 == null)
{
Form2 F2 = new Form2();
F2.MdiParent = this.MdiParent;
F2.Show();
}
else
{
Form2 F2 = (Form2)Application.OpenForms["Form2"];
F2.Focus();
}
}
以下是更多信息:
MDI父窗体是项目的起始窗体。
MDI父级的Form Load如下所示:
private void MDI_Load(object sender, EventArgs e)
{
Form1 F1 = new Form1();
F1.MdiParent = this;
F1.Show();
}
创建名称"Form2"f2.name = "Form2"
时,请尝试将其专门设置为F2。这就是OpenForms集合处理它的方式。
我同意Form
的范围是一个问题。这就是我在主mdi表单中打开Form
的方式
public partial class FormMain : Form
{
FormTest ftmTest;
...
void testToolStripMenuItem_Click(object sender, EventArgs e)
{
if(frmTest == null)
{
frmTest = new FormTest();
frmTest.MdiParent = this;
}
frmTest.Show();
frmTest.BringToFront();
}
MdiChildren未添加到Application.OpenForms集合中。
您需要检查MdiParent:的MdiChildren()集合
private void button1_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiParent.MdiChildren)
{
if (frm is Form2)
{
if (frm.WindowState == FormWindowState.Minimized)
frm.WindowState = FormWindowState.Normal;
frm.Focus();
return;
}
}
Form2 F2 = new Form2();
F2.MdiParent = this.MdiParent;
F2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiChildren)
{
if (frm is Form2)
{
if (frm.WindowState == FormWindowState.Minimized)
frm.WindowState = FormWindowState.Normal;
frm.Focus();
return;
}
}
Form2 F2 = new Form2();
F2.MdiParent = this;
F2.Show();
}
我的解决方案
代码:
View.FormV view = Application.OpenForms["FormV"] as View.FormV ;
if(view == null)
{
View.FormV View = new FormV();
View.MdiParent = this;
View.Show();
}
else
{
view.Focus();
}
我的样品
public partial class Form1: Form
{
Form frm= new Form2();
.........
if (frm.IsDisposed)
{
frm= new Form2();
}
frm.MdiParent = this;
frm.WindowState = FormWindowState.Maximized;
frm.Show();
frm.BringToFront();
}