主窗体已设为MDI容器,然后有一个地图子窗体在程序打开后就最大化显示,现在需要打开其他子窗体时出现问题了,  private void tsm21_Click(object sender, EventArgs e)
        {
            if (frmInfo == null || frmInfo.IsDisposed)
            {
                frmInfo = new FrmInfo();
            }
            frmInfo.Show();
            frmInfo.MdiParent = this;
            frmInfo.TopMost = true;
          
        }
这种方式界面上没有显示frminfo,可能是被地图窗体遮住了去掉
frmInfo.MdiParent = this;
frmInfo.TopMost = true;
可以显示frminfo,但子窗体可以移出主窗体,且系统状态栏里也会显示2个窗体用showdialog方式的话,程序运行时接收到一些消息的时候会不会无法弹出消息框?那我到底该怎么设置子窗体呢?

解决方案 »

  1.   

     frmInfo.TopMost = true;
    不用这句。
      

  2.   

    frmInfo.TopMost = true;
    不用这句,frminfo界面闪了一下就消失了,可能还是被地图子窗体遮住了
      

  3.   

    试试这样            
      if (frmInfo == null || frmInfo.IsDisposed)
      {
      frmInfo = new FrmInfo();
      }  frmInfo.MdiParent = this;
      this.SuspendLayout();
      frmInfo.Show();
      frmInfo.WindowState = FormWindowState.Maximized;
      this.ResumeLayout();
      this.PerformLayout();
      frmInfo.ResumeLayout();
      

  4.   

    if (frmInfo == null || frmInfo.IsDisposed)
      {
      frmInfo = new FrmInfo();
      }  frmInfo.MdiParent = this;
      this.SuspendLayout();
      frmInfo.Show();
      frmInfo.WindowState = FormWindowState.Maximized;
      this.ResumeLayout();
      this.PerformLayout();
      frmInfo.ResumeLayout();这样frminfo肯定是打开了,在主窗体的menuStrip1行多了最大化最小化和关闭按钮,但还是被地图窗体挡住了。
      

  5.   

    主窗体上有个panel,将其dock设置为fill,
    地图子窗体的parent设为该panel ////地图
                 plMap.Dock = DockStyle.Fill;            frmMap.TopLevel = false;
                frmMap.Parent = this.plMap;
                frmMap.Dock = DockStyle.Fill;
                frmMap.Show();
                
    这样是为了程序一打开地图子窗体就可以最大化显示在主界面内,不这么写的话地图子窗体会覆盖主窗体菜单现在改了一下, //显示地图子窗体
                frmMap = new FrmMap(this);
              frmMap.TopLevel = false;
               frmMap.Dock = DockStyle.Fill;
               frmMap.Show();  //系统管理
            private void tsm21_Click(object sender, EventArgs e)
            {
                if (frmInfo == null || frmInfo.IsDisposed)
                {
                    frmInfo = new FrmInfo();
                }
               frmInfo.Show();
            }现在第二个窗体可以显示出来了,但系统状态栏里还是有2个标题,而且子窗体可以移出主窗体
      

  6.   

    如果打开系统管理时像打开地图子窗体一样传参数进去,那么系统管理界面默认打开时是最大化的,如果这样写
            //系统管理
            private void tsm21_Click(object sender, EventArgs e)
            {
                if (frmInfo == null || frmInfo.IsDisposed)
                {
                    frmInfo = new FrmInfo(this);
                }           frmInfo.Show();
                        
               frmInfo.WindowState = FormWindowState.Normal ;
              
            }    public FrmInfo(FrmMain parent)
            {
               this.MdiParent = parent;
               this.WindowState = FormWindowState.Normal;
                //初始化控件
                InitializeComponent();
            }
    会有一个很明显的从最大化变成normal的过程
      

  7.   

    原来是被panel给挡住了啊,那就好办了,你在打开子窗体的时候将那个panel给隐藏了即可,在子窗体关闭事件中,检测父窗体是否还有其它子窗体存在,如果有,不做处理,如果没了,就将panel给显示出来。
      

  8.   

    panel本来是为了放地图子窗体的,为了控制它能最大化充满主窗体下面的区域的,不用panel地图子窗体会直接充满整个界面,把主窗体的菜单都遮住了,后来改了一下写法,把panel去掉了,地图以及其他子窗体都用如下方式打开  private void showForm()
            {
                //显示窗体
                frmMap = new FrmMap(this);
             }
    现在各子窗体的位置都正确了,但出现了一个新的问题,所有子窗体在显示时都默认最大化显示(已将属性设为normal),按以下方式写能看到一个非常明显的从最大化变成normal的过程frmInfo.Show();
    frmInfo.WindowState = FormWindowState.Normal ;这样写就直接是最大化了
    frmInfo.WindowState = FormWindowState.Normal ;
    frmInfo.Show();还有什么属性要设置?
      

  9.   

    吼吼,解决了,虽然其他子窗体已设为normal但地图窗体设为了max所以影响到了其他子窗体的打开。