在MDI主窗体中打开一个子窗体,当我隐藏MDI主窗体后,再显示MDI主窗体时,之前打开的子窗体会消失。。怎么才能让它不消失??有什么办法解决。。???

解决方案 »

  1.   

    MDI从未遇到过,检查你弹出子窗体的代码吧
      

  2.   

    你是如何"隐藏MDI主窗体"的,指的是MDI主窗体最小化吗,还是什么?
      

  3.   

     private void Button1_Click(object sender, EventArgs e)
            {
                Form1 f1 = new Form1();
                f1.MdiParent = this;
                if (Application.OpenForms["Form1"] == null)//判断f1窗口是否打开(限制只能打开一次)
                {
                    f1.Show();
                }
            } private void button2_Click(object sender, EventArgs e)
            {
                this.Visible = false;//隐藏MDI窗体
                Temp tp = new Temp();
                tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体
            }//下面是Temp窗体中的代码
     private void button1_Click(object sender, EventArgs e)
            {
                this.Visible = false;
                MDIParent p = new MDIParent ();
                p.Visible=true;
            }
    这样再次显示后,之前打开的子窗体就会消失。。
      

  4.   


    不是的。。this.Visible = false;  这样来隐藏。。
      

  5.   


    //下面是Temp窗体中的代码
     private void button1_Click(object sender, EventArgs e)
            {
                this.Visible = false;
                MDIParent p = new MDIParent ();
                p.Visible=true;
            }这里错了,你这是重新new了一个MDI父窗体,没有把以前的显示。
      

  6.   

    下面代码你自己改一下,我写给另一个人的答案。
    你只要把  button1.PerformClick(); 改成 this.Visible = true;
    就可以了。
    另外名字也得改改,呵呵。还有一种方法。比较简单,你看第二段代码段。
    public delegate void ButtonClickedDelegate();class FormA:Form
    {
      //省略各种构造函数,事件等
      {
          ButtonClickedDelegate npd = ButtonClicked;
          FormB b = new FormB(npd);
          b.ShowDialog();
      }  private void ButtonClicked()
      {
          button1.PerformClick();
      }  }class FormB:Form
    {
       ButtonClickedDelegate ButtonClicked;   //省略各种构造函数,事件等   //重载一个构造函数
      public FormB(ButtonClickedDelegate npd)
      {
          InitializeComponent();
          ButtonClicked = npd;
      }
      
      //button1 click事件
      {
         ButtonClicked();
      }}private void button2_Click(object sender, EventArgs e)
            {
                this.Visible = false;//隐藏MDI窗体
                Temp tp = new Temp();
                tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体
                  this.Visible = true;
            }
    //继续改代码 //下面是Temp窗体中的代码
     private void button1_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.OK;
            }
      

  7.   


    那怎么改呢???刚搞winform。。不是很了解。。
      

  8.   

    再给你贴一下吧,推荐你用这个方法,比较简单。第一种方法适用的环境更多,但是你这个用下面这个就够了。private void button2_Click(object sender, EventArgs e)
            {
                this.Visible = false;//隐藏MDI窗体
                Temp tp = new Temp();
                tp.ShowDialog();//显示一个临时窗体是为了再次显示MDI窗体
                  this.Visible = true;
            }
    //继续改代码 //下面是Temp窗体中的代码
     private void button1_Click(object sender, EventArgs e)
            {
                DialogResult = DialogResult.OK;
            }
      

  9.   

    我想说……你在Temp窗体里重新new出来的MDIParent 跟你之前隐藏的窗体根本就不是一个窗体…… 再者实现你需要的这种效果完全没有必要这么做 控制窗体隐藏也可以用this.Hide(); 显示this.Show();就可以了