類似問題也困擾了我:
   
   http://expert.csdn.net/Expert/topic/2066/2066046.xml?temp=.8162653

解决方案 »

  1.   

    To derek():
    好像也没有完整的回答呀,你的问题解决了吗?
      

  2.   

    你可以不用MDI的方法,替换的方法如下:
    把主窗体中加入一Panel,然后把所谓子窗体加入到此Panel中即可,不过此窗体FormBorderStyle设置为none。
      

  3.   

    你可以不用MDI的方法,替换的方法如下:
    把主窗体中加入一Panel,然后把所谓子窗体加入到此Panel中即可,不过此窗体FormBorderStyle设置为none。
      

  4.   

    让它看起来象最大化,但不是最大化
    子窗体获得焦点的时候,计算本身的大小
    MdiParent 的 ClientSize.Height ClientSize.Width
    如果有ToolBar减去ToolBar的高度,有StateBar就减去StateBar的高度
    然后高度和宽度都减去4(试了一下,好象要留一个小小的边出来)在MdiParent 的 MdiChildActivate 和 Resize 事件中if (this.ActiveMdiChild != null)
    {
      if (this.ActiveMdiChild.WindowState == FormWindowState.Minimized)
      {
        MessageBox.Show("没有需要最大化的窗体了,应该处理一下是否显示最小化状态");
      }
      //MessageBox.Show(this.ActiveMdiChild.Top.ToString());
      this.ActiveMdiChild.Top = 0;
      this.ActiveMdiChild.Left = 0;
      this.ActiveMdiChild.Width = this.ClientSize.Width - 4;
      this.ActiveMdiChild.Height = this.ClientSize.Height - 4 - this.toolBar1.Height - this.statusBar1.Height;
    }
    子窗体焦点获得时
    this.Width = 根据主窗计算出的大小
    this.Height = 同子窗体焦点失去的时候
    this.Width = 0;
    this.Height = 0;
    为了不让它们占位置
    我试了WindowState = Minimized,效果不好,如果窗体多了,最小化排列的位置就会占位
    所以在上面MessageBox的地方,去处理是不是显示Child的排列
    如果始终会有一个Child显示在最前端,那就不用处理了总之只要禁止Child最大化.就不会出问题
    如果还想要MDI的排列等属性,那就要自己加条件判断了,判断是否执行子窗的Resize
    就测试到这.基本没什么问题
    如果控件和窗体不多,愚翁说的办法最好