一个主窗体为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窗体的问题了。)谢谢

解决方案 »

  1.   

    "型号录入“应为:       
    scgl.frm_scgl_xhlr scglxhlr = new scgl.frm_scgl_xhlr();
    scglxhlr.MdiParent = this.MdiParent;
    scglxhlr.Show();
    scglxhlr.BringToFront();
    ;
      

  2.   

    你们好,
       用 scglxhlr.MdiParent = this.MdiParent; 是可以显示出来,但是显示出来的窗体不是在主窗体里面的。
       象我显示的 管理模块 窗体就是在主窗体里面(不管怎么拖都出不了主窗体)
       在帮帮,谢谢了
      

  3.   

    Mdi指的是多文档程序,lz要的是一个嵌套的可拖动的窗口,不一样的。
      

  4.   

    scglxhlr.MdiParent = this 就行了
      

  5.   

    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();//这句没有必要,可以不要.
      

  6.   

    scglxhlr.MdiParent = this  不行哟,我的 管理模块窗体(this)它也是一个子窗体。
    在我的程序中主窗体是一个父窗体,我是想把 型号录入 放到主窗体里面去,型号录入 窗体是继承 管理模块 窗体的
      其实我的做法很简单:主窗体为父窗体,其他是子窗体,每打开一个子窗体都在主窗体里面
      

  7.   

    hbxtlhx(平民百姓-自已动手,丰衣足食)  你好,
    我写的这个代码
    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();
    是在 管理模块 窗体写的,不是在主窗体写的。因为我在管理模块窗体上还有很多按钮(功能模块的),你说的把主窗体传到‘这个代码段里’应该怎么实现?谢谢。。
      

  8.   

    试了一下确实父窗体只能有一个,而子窗体必须在父窗体里。
    所以lz要用mdi是不能实现的。
      

  9.   

    wuzy1229(wuzy1229) 是可以了。。但是我拖动型号录入的时候它就跑出主窗体了。
    这样不好就是把鼠标点到别的窗体这个子窗体就不见(跑到后面去了。)
       象Delphi 如果设置了一个主窗体为父窗体,其他的窗体为子窗体,不管怎么样,子窗体总是在主窗体的上面,而且鼠标点别的地方,子窗体不会跑到后面去。
      

  10.   

    你如果代码是在子窗体中写的,那么可以通过这个子窗体得到主窗体,代码就要改成这样了:scglxhlr.MdiParent = this.MdiParent;你上面说的不可以应该是不对的.我测试过没有问题!
      

  11.   

    如果你想让这个窗体始终在其它的窗体上面,其实你可以用如下的方法来显示:scgl.frm_scgl_xhlr scglxhlr = new scgl.frm_scgl_xhlr();
    scglxhlr.Show(this.MdiParent);
      

  12.   

    scglxhlr.Show(this.MdiParent); 这样写法对吗?
    我调试的时候出错了。。说:E:\wudong\试验例子\c#\book\guanli\guanli\scgl\scgl_base.cs(259): 重载“Show”方法未获取“1”参数
      

  13.   

    scglxhlr.MdiParent = this.MdiParent;
    你上面说的不可以应该是不对的.我测试过没有问题!   不是说不可以,是说显示出来的 型号录入 窗体在 主窗体 外面。我是想显示出来的 型号录入 窗体要显示在主窗体里面
      

  14.   

    你用的是VS2003?Show方法在VS2005中有一个重载.不过你可以使用如下的方式代替:
    scgl.frm_scgl_xhlr scglxhlr = new scgl.frm_scgl_xhlr();
    this.MdiParent.AddOwnerForm(scglxhlr);
    scglxhlr.Show();如果是子窗体,又要在所有的子窗体最上面,这一点可能做不到.
    要么是子窗本,被主窗体包含,要么是上层窗体.
      

  15.   

    是的,我是用VS2003,我用 this.MdiParent.AddOwnedForm(scglxhlr);但是提示:
    未将对象引用设置到对象的实例通不过呀。