winform里只有一个主窗体叫frmMain,我在一个叫打开的button的单击事件下面写有以下代码:
 private void button1_Click(object sender, EventArgs e)
        {
            frmMain frm = new frmMain();
            frm.Text = "第二个窗体";
            frm.Show();
        }
我现在想要关闭frmMain窗体而留下“第二个窗体”,请问高手们,这样要怎样才能做到?

解决方案 »

  1.   

    任何窗体都是由你的应用程序宿主加载的,比如Main,
    你完全可以自己建立事件循环,直到所有窗口都关闭,才退出应用程序,
    (只不过App.run(form)这是个便利函数,微软自动替你建立了事件循环,直到你关掉那个窗口)
    详情参考MSDN:
    http://msdn.microsoft.com/zh-cn/library/ms157901.aspx
      

  2.   

    wuyazhe 给出标准的做法:
    http://blog.csdn.net/wuyazhe/article/details/5642431
      

  3.   

    wuyazhe给出标准的做法,参考: http://blog.csdn.net/wuyazhe/article/details/5642431
      

  4.   

    wuyazhe给出标准的做法,参考: http://blog.csdn.net/wuyazhe/article/details/5642431
      

  5.   

    把 frmMain   frm   =   new   frmMain();
    宣告在
      private   void   button1_Click(object   sender,   EventArgs   e) 
    之外
      

  6.   

                            frmMain   frm   =   new   frmMain(); 
    private   void   button1_Click(object   sender,   EventArgs   e) 
                    {                         frm.Text   =   "第二个窗体 "; 
                            frm.Show(); 
                    } 
      

  7.   


    private   void   button1_Click(object   sender,   EventArgs   e)
    {
        frmMain   frm   =   new   frmMain();
        frm.Text   =   "第二个窗体 ";
        frm.Show();
        this.Hidden();//隐藏主窗体(button1要在主窗体上)
    }
      

  8.   


    private   void   button1_Click(object   sender,   EventArgs   e)
    {
        frmMain   frm   =   new   frmMain();
        frm.Text   =   "第二个窗体 ";
        frm.Show();
        this.Hidden();//隐藏主窗体(button1要在主窗体上)
    }
      

  9.   

    思路:如果楼主并不是想让frmMain关闭,只是隐藏的话,那么可以设置frmMain的透明度为0,或者hide();
      

  10.   

    需要使用this.Visible=false;private void button1_Click(object sender, EventArgs e)
            {
                FrmMain frm = new FrmMain();
                frm.Text = "第二个窗体 ";
                frm.Show();
                this.Visible=false;
            }
      

  11.   


    应该使用this.Visible=false;
      

  12.   

    使用下面方法可以关闭一个打开另一个。
    第一个Form的Button Click
      private   void   button1_Click(object   sender,   EventArgs   e) 
      { 
          this.DialogResult = DialogResult.OK;//关闭当前Form
      } 
    在Program中:
    frmMain   frm   =   new   frmMain(); 
    using (Form1 frm1 = new Form1())
    {
        DialogResult dr= frm1.ShowDialog();
        if (dr.Equals(DialogResult.OK)) //如果第一个窗口按了Button
        {
            Application.Run(new frmMain());  //启动第二个窗口
        }
    }
      

  13.   


    这样处理存在一个风险,就是但你关闭非主Form的所有其它Form时,因为主Form不可见,会误认为程序已经关闭,其实还没有,所以需要在非主Form的关闭事件中加入关闭整个应用程序的代码。
      

  14.   


    new Thread((ThreadStart)delegate
                {
                    Application.Run(new Form1());
                }).Start();
                this.Close();
      

  15.   

    主窗体是不能关闭的,主窗体关闭了整个程序也就退出了,所以不能使用Application.Exit(),this.Dispose(),this.Close()等方法;但可以将窗体隐藏(纠正下前面的错误,应该是:this.Hide()方法),或者将窗体的透明度(Opacity)设置为0
      

  16.   

    主窗体只能隐藏,不能销毁。
    隐藏有hide方法,或者设置visable为false。
      

  17.   

    在需要关闭的窗体的代码中写:
    frmMain frmM = new frmMain();//第二次窗体
    this.Hide();
    if (frmM.ShowDialog() != DialogResult.OK)//打开第二个窗体,同时捕捉到第二个窗体关闭时的状态
    {
        Environment.Exit(Environment.ExitCode);//如果第二个窗体光笔,则关闭整个程序进程。
        return;
    }第二个窗体不需要些任何代码。
      

  18.   

    如果不考虑关闭问题,可直接用this.Hide();
      

  19.   

    主窗体关闭则程序退出,将form2改为主窗体,可以改为:
    在program 中改为:Application.Run(new form2());
    在form2中改为
    public Form2()
    {
        InitializeComponent();
        this.hide();
        frmMain   frm   =   new   frmMain();
        frm.show();
    }在frmMain 中关闭时再将Form2显示