在C#怎么样设置,打开MDIChilden
一个主窗体为MIDContainer,主窗体上有一个按钮,点击这个按钮出来一个“管理模块”的窗体,在生成这个模块的事件写:(代码写在主窗体上)
scgl.frm_scgl_base scglbase = new scgl.frm_scgl_base();
scglbase.MdiParent = this;
scglbase.Top = 0;
scglbase.Left = 0;
scglbase.Show();
scglbase.BringToFront();
有一个模块 "型号录入 "是继承“管理模块”出来的,点击“管理模块”上的“型号录入”按钮就出来“型号录入”界面。所以我是这样写的:(代码在管理模块上写)
frm_main mainF = new frm_main(); //frm_main是主窗体
scgl.frm_scgl_xhlr scglxhlr = new scgl.frm_scgl_xhlr();
scglxhlr.MdiParent = mainF; //这里出问题
scglxhlr.Show();
scglxhlr.BringToFront();
发现问题:我加了 scglxhlr.MdiParent = mainF; 无论怎么点击“型号录入”按钮都不出来,但是如果没有 scglxhlr.MdiParent = mainF;出来的窗体有不在主窗体里面。请大虾帮忙。。(也就是MDI窗体的问题了。)谢谢。。。
------解决方案-------------------- "型号录入“应为:
scgl.frm_scgl_xhlr scglxhlr = new scgl.frm_scgl_xhlr();
scglxhlr.MdiParent = this.MdiParent;
scglxhlr.Show();
scglxhlr.BringToFront();
;
------解决方案--------------------frm_main mainF = new frm_main();
scglxhlr.MdiParent = mainF; //这里出问题
--------------------------
你这里设置MdiParent是一个新的frm_Main()实例,而不是程序里的主窗口了.当然会异常.
你应该把程序里启动的那个主窗体(为MdiParent的窗体)传到这个代码段里而不是新New出来一个.
一般来说,你应该这样的:
在frm_main窗体的代码中:
--------------frm_main.cs中-------------
scgl.frm_scgl_xhlr scglxhlr = new scgl.frm_scgl_xhlr();
scglxhlr.MdiParent = this; //这里的this就是主窗口frm_Main的当前实例的引用.
scglxhlr.Show();
scglxhlr.BringToFront();//这句没有必要,可以不要.
------解决方案--------------------你如果代码是在子窗体中写的,那么可以通过这个子窗体得到主窗体,代码就要改成这样了:
scglxhlr.MdiParent = this.MdiParent;
你上面说的不可以应该是不对的.我测试过没有问题!
------解决方案--------------------你用的是VS2003?
Show方法在VS2005中有一个重载.不过你可以使用如下的方式代替:
scgl.frm_scgl_xhlr scglxhlr = new scgl.frm_scgl_xhlr();
this.MdiParent.AddOwnerForm(scglxhlr);
scglxhlr.Show();
如果是子窗体,又要在所有的子窗体最上面,这一点可能做不到.
要么是子窗本,被主窗体包含,要么是上层窗体.