首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-10-18 
怎么将很多窗体变成MDI窗体的子窗体我首先设置了主窗体的ISMDIContainer属性为true,我想启动的时候很多窗

怎么将很多窗体变成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();
谢谢,可能没这么简单,可能我需要的是利用反射生成子窗体,比如有十几个子窗体只选择性打开几个,如果增加到几十个窗体,那怎么办?

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

热点排行