我在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父级的表单加载如下:
private void MDI_Load(object sender, EventArgs e)
{
Form1 F1 = new Form1();
F1.MdiParent = this;
F1.Show();
}
答案 0 :(得分:0)
尝试在创建名称时将名称“Form2”设置为F2,f2.name = "Form2"
。这就是OpenForms集合如何解决它。
答案 1 :(得分:0)
我同意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();
}
答案 2 :(得分:0)
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();
}
答案 3 :(得分:0)
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();
}