主窗体为MDI窗体,新加载的窗体不会出现在窗体最前方。而是被原来的窗体遮盖住了。现在如果我先打开 “销售”窗体,再打开“管理”窗体,"销售"窗体就遮盖住了"管理"窗体。我想要让新窗体出现最前方或者是加载前关闭上一个旧窗体。下面是我加载窗体的代码,应该如何写? private void 销售ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (Form froms in this.MdiChildren)
            {
                if (froms is m_sale)
                {
                    froms.Focus();
                    return;
                }
            }
            m_sale sale = new m_sale();
            sale.MdiParent = this;
            sale.Show();
        }        private void 管理ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (Form froms in this.MdiChildren)
            {
                if (froms is m_sale)
                {
                    froms.Focus();
                    return;
                }
            }
            m_usermange usermanage = new m_usermange();
            usermanage.MdiParent = this;
            usermanage.Show();
        }

解决方案 »

  1.   

    用  From.ShowDialog()  只有在关闭当前子窗体的时候才能对父窗体执行相应的操作
      

  2.   

    如果在Form里面调Form的话 StartPosition = CenterParent
      

  3.   

    From.ShowDialog();现在提示我:
    非顶级窗体不能显示为模式对话框。在调用 showDialog 之前应从所有父窗体中移除该窗体。
      

  4.   

    BringToFront(); 这个东西怎么用?我这样用对不对? 这样的话我先打开A再打开B,B在A前面,但是如果我加载A,那么A不会再被加载了。而且如果先加载B再要加载A,A也不能被加载。是不是我写的代码不对啊
      private void 刷卡售票ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                foreach (Form froms in this.MdiChildren)
                {
                    if (froms is m_sale)
                    {
                        froms.Focus();
                        return;
                    }
                }
                m_sale A = new m_sale();  
                A.MdiParent = this;
                A.BringToFront(); 
                A.Show();
            }        private void 用户管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                
                foreach (Form froms in this.MdiChildren)
                {
                    if (froms is m_sale)
                    {
                        froms.Focus();
                        return;
                    }
                }
                m_usermange B = new m_usermange();
                B.MdiParent = this;
                B.BringToFront(); 
                B.Show();
            }
      

  5.   

     Dictionary<string, Form> _forms = new Dictionary<string, Form>();        private bool Contains(string formName)
            {
                return _forms.ContainsKey(formName);
            }        private void ShowForm(Form form, bool Maximized = true)
            {
                string formName = form.Name;
                if (!Contains(formName))
                {
                    _forms.Add(formName, form);
                    form.Disposed += (x, y) =>
                    {
                        _forms.Remove(formName);
                    };
                    form.MdiParent = this;
                    if (Maximized)
                        form.WindowState = FormWindowState.Maximized;
                 
                    form.Show();
          
                }
                else
                {
                    _forms[formName].BringToFront();
                }
            }
    private void 刷卡售票ToolStripMenuItem_Click(object sender, EventArgs e)
            {
               ShowForm(new m_sale());
            }        private void 用户管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                 ShowForm(new m_usermange());        
            }
      

  6.   

    this.splitContainer1.Panel2.Controls.Add(myform);
    myform.Show();
    myform.BringToFront();
      

  7.   

    我用的是MDI啊 要不让也不会 这么费劲了
      

  8.   

    MDI同理的嘛晕倒
    myform.MdiParent= this;
    myform.Show();
    myform.BringToFront();
      

  9.   


    你这个单个窗体是没问题的,但是2个以上窗体就会。先打开A再打开B,B在A前面,但是如果我加载A,那么A不会再被加载了。而且如果先加载B再要加载A,A也不能被加载。
    private void 刷卡售票ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                foreach (Form froms in this.MdiChildren)
                {
                    if (froms is m_sale)
                    {
                        froms.Focus();
                        return;
                    }
                }
                m_sale A = new m_sale();  
                A.MdiParent = this;
                A.Show();
                A.BringToFront(); 
            }        private void 用户管理ToolStripMenuItem_Click(object sender, EventArgs e)
            {
                
                foreach (Form froms in this.MdiChildren)
                {
                    if (froms is m_sale)
                    {
                        froms.Focus();
                        return;
                    }
                }
                m_usermange B = new m_usermange();
                B.MdiParent = this;
                B.Show();
                B.BringToFront(); 
             }
      

  10.   

    lz的最开始的代码应该可以的吧,Activate()和Focus()好像都能后打开窗口覆盖原来的窗口啊,我自己就是这样做的,能够成功的啊。
      

  11.   

    要不在froms.Focus();
    前面加上froms.MdiParent = this;
      

  12.   

    我写个方法给你填吧。无语了~~~~public Form Openform(System.Type Myformtype)
    {
        Form myform = null;
        if (Myformtype== null)
        {
             return myform;
        }
         if (myform == null)
         {
             myform = (Form)System.Activator.CreateInstance(Myformtype);
         }
         if (CheckFormIsOpen(myform.Name) == true)
         {
             return null;
         }
       myform.Show();
       myform.BringToFront();
       return myform;
    }
      

  13.   

    少了一句myform.MdiParent= this;
    家在myform.show();前面