日期:2014-05-19  浏览次数:20967 次

在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();

如果是子窗体,又要在所有的子窗体最上面,这一点可能做不到.
要么是子窗本,被主窗体包含,要么是上层窗体.