winform窗体 在父窗体中点击按钮打开新的子窗体的同时关闭上一个打开的子窗体、怎么实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 private void button1_Click(object sender, EventArgs e) { if (this.OwnedForms.Length != 0) { foreach (Form form in this.OwnedForms) { form.Dispose(); } } Form2 subForm1 = new Form2(); subForm1.Owner = this; subForm1.Show(); } private void button2_Click(object sender, EventArgs e) { if (this.OwnedForms.Length != 0) { foreach (Form form in this.OwnedForms) { form.Dispose(); } } Form3 subForm2 = new Form3(); subForm2.Owner = this; subForm2.Show(); } FoxDave的方法很不错,不过有点复杂。如果是模式窗体的话是不可以的。要关闭的话,直接把窗体名。close; Form3 subForm2 = new Form3(); subForm2.Owner = this;this.close(); subForm2.Show(); 你可以将子窗体的owner属性设为父窗体,当打开一个新窗体前,先循环父窗体的owner属性,如果有窗体,就将其关闭,然后,打开新窗体 private void btn1_click(){ Form2 frm2=new Form2(); frm2.Owner=this;frm2.show();}private void btn2_click(){ Form3 frm3=new Form3();closeForm(this.OwnedForms);frm2.Owner=this;frm2.show();}private void closeForm(Form[] frms ) { foreach(Form frm in frms ) { frm.close() if(frm.OwnedForms.Length >0) closeForm(frm.OwnedForms); } } //都是父窗体中的代码private void btn1_click(){ Form2 frm2=new Form2(); frm2.Owner=this;frm2.show();}private void btn2_click(){ closeForm(this.OwnedForms);Form3 frm3=new Form3();frm2.Owner=this;frm2.show();}private void closeForm(Form[] frms ) { foreach(Form frm in frms ) { frm.close() if(frm.OwnedForms.Length >0) closeForm(frm.OwnedForms); } } 更正一下private void btn2_click(){ closeForm(this.OwnedForms);Form3 frm3=new Form3();frm3.Owner=this;frm3.show();} 你打开的窗体的时候有没有指定owner? if (this.MdiChildren.Length != 0) // 先判断 有没有子窗体ActiveMdiChild 获取 子窗体 然后关闭 打开NEWBUTTON 下的窗体 Form1 form1 = new Form1(); Form2 form2 = new Form2(); if (this.MdiChildren.Length != 0) { if (this.ActivateMdiChild = form1) { form1.closed(); form2.show(); } if (this.ActivateMdiChild = form2) { form2.closed(); form1.show(); } } else { return; } this.ActivateMdiChild 获取的 就是当前窗体啊 不是固定的 才用 if (this.ActivateMdiChild = form1) 判断啊 窗体多的 麻烦 if (this.ActivateMdiChild = form1)这里还是出问题、说ActivateMdiChild 是一个方法组无法赋值 Form2 f2; private void button1_Click(object sender, EventArgs e) { if (f2 == null) { f2 = new Form2(); f2.Show(); } else { f2.Close(); f2 = new Form2(); f2.Show(); } } 在不行 你用这个 不要关闭上一个窗体 Form1 form1 = null; private void button_Click(object sender, EventArgs e) { if (form1 == null) { form1 = new DistrictInformation(); form1.MdiParent = this; form1.WindowState = FormWindowState.Maximized; form1.Show(); } else { if (form1.IsDisposed) { form1 = new DistrictInformation(); } form1.MdiParent = this; form1.WindowState = FormWindowState.Maximized; form1.Show(); form1.Focus(); } DistrictInformation() 改成 Form1() private void button2_Click(object sender, EventArgs e) { CallcenterForm callC = new CallcenterForm(); Frmcx cx = new Frmcx(); Frmclgl clgl = new Frmclgl(); if (this.MdiChildren.Length != 0) { if (this.ActivateMdiChild == callC) { callC.Close(); clgl.Show(); } if (this.ActivateMdiChild == cx) { cx.Close(); clgl.Show(); } } else { return; } private void button1_Click(object sender, EventArgs e) { Form2 fm2 = new Form2(); if (this.OwnedForms.Length != 0) { foreach (Form fm in this.OwnedForms) { fm.Close(); } } fm2.Owner = this; fm2.Show(); } private void button2_Click(object sender, EventArgs e) { Form3 fm3 = new Form3(); if (this.OwnedForms.Length != 0) { foreach (Form fm in this.OwnedForms) { fm.Close(); } } fm3.Owner = this; fm3.Show(); } private void button2_Click(object sender, EventArgs e){ closeForm(this.OwnedForms);Frmclgl clgl = new Frmclgl();clgl.Owner = this;clgl.MdiParent = this;clgl.Show();}private void closeForm(Form[] frms ) { foreach(Form frm in frms ) { frm.close() if(frm.OwnedForms.Length >0) closeForm(frm.OwnedForms); } } clgl.MdiParent = this;这句不要 private void button2_Click(object sender, EventArgs e) { Frmclgl clgl = new Frmclgl(); if (this.OwnedForms.Length != 0) { foreach (Form fm in this.OwnedForms) { fm.Close(); } } clgl.Owner = this; clgl.MdiParent = this; clgl.Show();这样写之前已经打开的窗体还是没有关闭 上面这个是多个Bitton控制 clgl.MdiParent = this;这句不要 Frmclgl clgl = null;private void button2_Click(object sender, EventArgs e) { if (clgl == null) { clgl = new Frmclgl(); clgl.MdiParent = this; clgl.WindowState = FormWindowState.Maximized; clgl.Show(); } else { if (clgl.IsDisposed) { clgl = new Frmclgl(); } clgl.MdiParent = this; clgl.WindowState = FormWindowState.Maximized; clgl.Show(); clgl.Focus(); }后面的窗体还是没关闭 private void button2_Click(object sender, EventArgs e) { Frmclgl clgl = new Frmclgl(); if (this.MdiChildren.Length != 0) { foreach (Form fm in this.MdiChildren) { fm.Close(); } } clgl.MdiParent = this; clgl.Show(); 运算符“==”无法应用于方法组和CallcenterForm类型的操作数 其实楼上有很多方法也是可以的,clgl.MdiParent 和clgl.Owned不能同时用 是要关闭除主窗体之外的窗体吗?foreach(Form in Application.OpenForms){ if(form.Handle != this.Handle) { form.Close(); }} 自定义控件下的ToolTip使用 C#中调用非托管C++ dll 关于sql中的时间戳 装箱与解引用的问题 c#大项目中大表关联! 如何改写自定义控件的BackColor属性 (高分重赏)本人想参加“赢在中国”想请各位兄弟姐妹们给我的项目取个好名字;并且补充补充内容 C#连接Access问题,急需帮忙!谢谢! 请问c#里如何实现通过child对象获取parent对象? 有没哪位兄弟写过远程抓屏的程序 ColumnHeaderMouseClick事件问题 公共子窗体向当前调用子窗体的父窗体传值问题
{
if (this.OwnedForms.Length != 0)
{
foreach (Form form in this.OwnedForms)
{
form.Dispose();
}
}
Form2 subForm1 = new Form2();
subForm1.Owner = this;
subForm1.Show();
} private void button2_Click(object sender, EventArgs e)
{
if (this.OwnedForms.Length != 0)
{
foreach (Form form in this.OwnedForms)
{
form.Dispose();
}
}
Form3 subForm2 = new Form3();
subForm2.Owner = this;
subForm2.Show();
}
FoxDave的方法很不错,不过有点复杂。
如果是模式窗体的话是不可以的。要关闭的话,直接把窗体名。close; Form3 subForm2 = new Form3();
subForm2.Owner = this;
this.close();
subForm2.Show();
{
Form2 frm2=new Form2();
frm2.Owner=this;
frm2.show();
}private void btn2_click()
{
Form3 frm3=new Form3();closeForm(this.OwnedForms);frm2.Owner=this;
frm2.show();
}
private void closeForm(Form[] frms )
{
foreach(Form frm in frms )
{
frm.close()
if(frm.OwnedForms.Length >0)
closeForm(frm.OwnedForms);
}
}
private void btn1_click()
{
Form2 frm2=new Form2();
frm2.Owner=this;
frm2.show();
}private void btn2_click()
{
closeForm(this.OwnedForms);
Form3 frm3=new Form3();
frm2.Owner=this;
frm2.show();
}
private void closeForm(Form[] frms )
{
foreach(Form frm in frms )
{
frm.close()
if(frm.OwnedForms.Length >0)
closeForm(frm.OwnedForms);
}
}
private void btn2_click()
{
closeForm(this.OwnedForms);
Form3 frm3=new Form3();
frm3.Owner=this;
frm3.show();
}
// 先判断 有没有子窗体
ActiveMdiChild 获取 子窗体
然后关闭 打开NEWBUTTON 下的窗体
Form2 form2 = new Form2();
if (this.MdiChildren.Length != 0)
{
if (this.ActivateMdiChild = form1)
{
form1.closed();
form2.show();
}
if (this.ActivateMdiChild = form2)
{
form2.closed();
form1.show();
}
}
else { return; }
if (this.ActivateMdiChild = form1)
这里还是出问题、说ActivateMdiChild 是一个方法组无法赋值
private void button1_Click(object sender, EventArgs e)
{
if (f2 == null)
{
f2 = new Form2();
f2.Show();
}
else
{
f2.Close();
f2 = new Form2();
f2.Show();
}
}
Form1 form1 = null;
private void button_Click(object sender, EventArgs e)
{
if (form1 == null)
{
form1 = new DistrictInformation();
form1.MdiParent = this;
form1.WindowState = FormWindowState.Maximized;
form1.Show();
}
else
{
if (form1.IsDisposed)
{
form1 = new DistrictInformation();
}
form1.MdiParent = this;
form1.WindowState = FormWindowState.Maximized;
form1.Show();
form1.Focus();
}
{
CallcenterForm callC = new CallcenterForm();
Frmcx cx = new Frmcx();
Frmclgl clgl = new Frmclgl();
if (this.MdiChildren.Length != 0)
{
if (this.ActivateMdiChild == callC)
{
callC.Close();
clgl.Show();
}
if (this.ActivateMdiChild == cx)
{
cx.Close();
clgl.Show();
}
}
else { return; }
{
Form2 fm2 = new Form2();
if (this.OwnedForms.Length != 0)
{
foreach (Form fm in this.OwnedForms)
{
fm.Close();
}
}
fm2.Owner = this;
fm2.Show();
} private void button2_Click(object sender, EventArgs e)
{
Form3 fm3 = new Form3();
if (this.OwnedForms.Length != 0)
{
foreach (Form fm in this.OwnedForms)
{
fm.Close();
}
}
fm3.Owner = this;
fm3.Show(); }
{
closeForm(this.OwnedForms);Frmclgl clgl = new Frmclgl();
clgl.Owner = this;
clgl.MdiParent = this;
clgl.Show();}
private void closeForm(Form[] frms )
{
foreach(Form frm in frms )
{
frm.close()
if(frm.OwnedForms.Length >0)
closeForm(frm.OwnedForms);
}
}
这句不要
{
Frmclgl clgl = new Frmclgl();
if (this.OwnedForms.Length != 0)
{
foreach (Form fm in this.OwnedForms)
{
fm.Close();
}
}
clgl.Owner = this;
clgl.MdiParent = this;
clgl.Show();
这样写之前已经打开的窗体还是没有关闭
这句不要
Frmclgl clgl = null;
private void button2_Click(object sender, EventArgs e)
{
if (clgl == null)
{
clgl = new Frmclgl();
clgl.MdiParent = this;
clgl.WindowState = FormWindowState.Maximized;
clgl.Show();
}
else
{
if (clgl.IsDisposed)
{
clgl = new Frmclgl();
}
clgl.MdiParent = this;
clgl.WindowState = FormWindowState.Maximized;
clgl.Show();
clgl.Focus();
}后面的窗体还是没关闭
{
Frmclgl clgl = new Frmclgl();
if (this.MdiChildren.Length != 0)
{
foreach (Form fm in this.MdiChildren)
{
fm.Close();
}
}
clgl.MdiParent = this;
clgl.Show();
运算符“==”无法应用于方法组和CallcenterForm类型的操作数
{
if(form.Handle != this.Handle)
{
form.Close();
}
}