读书人

如何将很多窗体变成MDI窗体的子窗体

发布时间: 2013-10-18 20:53:13 作者: rapoo

怎么将很多窗体变成MDI窗体的子窗体
我首先设置了主窗体的ISMDIContainer属性为true,我想启动的时候很多窗体就是它的子窗体
目前用代码for (int k = 0; k < this.MdiChildren.Length; k++)查找子窗体时,发现this.MdiChildren.Length=0,没有子窗体
[解决办法]

引用:
Quote: 引用:
具体要怎么写?代码写在哪里?


//show MDIchild
public void ShowChild(string childFullName)
{
if (!IsExist(childFullName))
{
Type type = Type.GetType(childFullName);
if (type != null)
{
object obj = Activator.CreateInstance(type);
Form child = (Form)obj;
child.MdiParent = this;
child.Dock = DockStyle.Fill;
child.Show();
childFormList.Add(child);
}
}
else
{
Form existForm = childFormList.Find(form => (form.GetType().ToString() == childFullName));
existForm.Activate();
}
}
// if child has been created
public bool IsExist(string childFullName)
{
foreach (Form f in childFormList)
{
if (f.GetType().ToString() == childFullName)
return true;
}
return false;
}


[解决办法]
首先理解子窗体是什么和主窗体的关系是什么?
从程序结构来说,他们是没有关系的.
如果非要把它们扯上关系,在主窗体打开一个窗体,如果它是自己的子窗体就放到MDI容器里.

1.主窗体不知道它有多少子窗体.
2.子窗体只不过它的有个属性是主窗体而已.

你想得动态得到子窗体只有一种方式,就是反射,获取所有Form,如果form中PrentForm是"主窗体",实例化它并Show
[解决办法]
引用:
Quote: 引用:

子窗体是在运行时设定的:
childForm.MdiParent = mainForm;
childForm.Show();
谢谢,可能没这么简单,可能我需要的是利用反射生成子窗体,比如有十几个子窗体只选择性打开几个,如果增加到几十个窗体,那怎么办?

是否子窗体,与反射,数量有关系吗?

读书人网 >C#

热点推荐