100分求救:如何让主窗体的子窗体创建的窗体也成为它的子窗体? FORM1为 MDI窗体,FORM2为FORM1的子窗体,在FORM2上点击按钮创建窗体FORM3,如何使FORM3也成为FORM1的子窗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 form3.mdiparent = form1; 设置Form3的MdiParent属性为Form1不可以吗? 在打开事件里写Form3 f3 = new Form3();f3.MdiParent = this.MdiParent;f3.Show(); 如果你是在form2里写的,可能需要这样写:form3.MdiParent = form2.MdiParent; MDI只有一个,如果是子窗体只要通过Show(父窗体)或ShowDialog(父窗体)就可以了,楼主可以参考一下这篇文章,http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx Form1 MDI主窗口namespace WindowsFormsApplication2{ public partial class Form1 : Form { public Form1() { InitializeComponent(); Form2 form2 = new Form2(); form2.MdiParent = this; form2.Show(); } }}Form2namespace WindowsFormsApplication2{ public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form3 form3 = new Form3(); form3.MdiParent = this.MdiParent; form3.Show(); } }} 其实上面有正解啊首先你需要确定你是否第一个主窗体和子窗体间 已经正确的建立了MDI关系!其实我想楼主你问这个问题的话,应该是建立的关系!其实子窗体创建的新的窗体要继续延续子窗体和主窗体的MDI关系 只要获取子窗体的MdiParent特点就行了在子窗体创建新窗体的事件里面//先new一个新窗体对象 (下面以新窗体为form3为例子,具体的以你创建的窗体名称来定)Form3 fm3=new Form3();//然后对象获取MdiParent的特性 下面的this.MdiParent就是把子窗体和主窗体的父子关系传给新创建的窗体fm3.MdiParent=this.MdiParent; //接下来显示新窗体fm3.Show();//如果你需要隐藏或者关闭当前子窗体就写this.Colse(); 9楼的: 运行结果如下 ************** 异常文本 **************System.ArgumentException: 只能向 MdiClient 添加 MDI 子窗体。 你有没有把form1主窗口的IsMdiContainer设置成true了?我测试是通过的 按道理是应该设了 不然它第一个子窗体怎么能形成MDI关系窗体呢? private void button1_Click(object sender, EventArgs e) { Form3 form3 = new Form3(); form3.MdiParent = this.MdiParent; form3.Show(); } 代码这样实现 肯定是没错的 应该是细节地方出了问题 9楼的没错。如果有问题,有可能是以下2点:form1主窗口的IsMdiContainer要设置成true如果是写form3.ShowDialog();会报错,因为form3已经有了父窗体。 是我写错了!我把Mdiparent 写成了 parent,郁闷啊…… 问个正则表达式加替换的 有关数据集文件的问题 c# 16进制转化为字符串 Access Join写法 关于VScrollBar的问题 难题 获得标题,, 我是个"问题少年",又遇到问题了。数据库 c#,还请各位老师帮忙看看! asp.net数据库执行时的异常如何写try...catch 海波.net帮我看看升级水晶报表组件后控件创建出错的问题。 access如何获取自动生成的最后一个id号码? c# 怎么实现一个服务端 多个客户端 VS2008中C#和C++读取二进制文件的效率对比问题
Form3 f3 = new Form3();
f3.MdiParent = this.MdiParent;
f3.Show();
form3.MdiParent = form2.MdiParent;
http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Form2 form2 = new Form2();
form2.MdiParent = this;
form2.Show();
}
}
}Form2namespace WindowsFormsApplication2
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Form3 form3 = new Form3();
form3.MdiParent = this.MdiParent;
form3.Show();
}
}
}
其实我想楼主你问这个问题的话,应该是建立的关系!其实子窗体创建的新的窗体要继续延续子窗体和主窗体的MDI关系 只要获取子窗体的MdiParent特点就行了在子窗体创建新窗体的事件里面//先new一个新窗体对象 (下面以新窗体为form3为例子,具体的以你创建的窗体名称来定)
Form3 fm3=new Form3();//然后对象获取MdiParent的特性 下面的this.MdiParent就是把子窗体和主窗体的父子关系传给新创建的窗体
fm3.MdiParent=this.MdiParent; //接下来显示新窗体
fm3.Show();//如果你需要隐藏或者关闭当前子窗体就写
this.Colse();
运行结果如下
************** 异常文本 **************
System.ArgumentException: 只能向 MdiClient 添加 MDI 子窗体。
{
Form3 form3 = new Form3();
form3.MdiParent = this.MdiParent;
form3.Show();
} 代码这样实现 肯定是没错的 应该是细节地方出了问题
form1主窗口的IsMdiContainer要设置成true
如果是写form3.ShowDialog();会报错,因为form3已经有了父窗体。