C#如何打开另一个新窗口的同时关闭自身窗口?
Form2 NewForm=New Form2();
NewForm.Open();
This.Close();这样写不行,应用程序全部关闭了。

解决方案 »

  1.   

    对win 不大了解
    是不是要这样?
    This.Close();
    NewForm.Open();
      

  2.   

    哦;呵呵;那得等做过win的兄弟帮你了;
      

  3.   

    哦,错了。这样的:
    Form2 NewForm=New Form2();
    NewForm.Show();
    This.Close();
    大家快告诉我啊
      

  4.   

    Form2 fm=new Form2();
    fm.Show();
    this.Visible=false;
    这样就可以了
      

  5.   

    不要用关闭 把visibel属性改为FALSE就可以了 障眼法```
      

  6.   

    Form1.ActiveForm.Visible=false;
    Form2 form2=new Form2();
    form2.ShowDialog(this);
    我的做法```
    先执行Form1.ActiveForm.Visible=false;
    再new窗体 要不不行 调试过了的
      

  7.   

    重写Form1_Load事件,把上一个窗体传到这个窗体,再通过这个窗体关闭上一个窗体。
      

  8.   

    先打开NewForm,然后再NewForm的fromload事件里关闭原来的窗体,试试
      

  9.   

    这样:
    private Form2_Load(Form1 fr)
    {
      InitializeComponent();
      fr.Close();
    }
    Form1里的代码:
    private BtnFormShow_Clice(object sender, System.EventArgs e)
    {
      Form2 f = new Form2(this);
      f.show;
    }这样就可以了
      

  10.   

    注意别修改Form2的构造函数,重写一个构造函数就可以了
      

  11.   

    像这样的不可能关闭父窗体的,使用this.hide(),把它隐藏了吧。
    但要记得关闭Form2的时候,要把Form1也关掉。
    Form2 NewForm=New Form2();
    this.hide();
    NewForm.ShowDialog();
    This.Dispose();---------------------------------------
    sean840610(更木剑八) 你的办法不行吧。
    Form2 把Form1 关闭了,那么Form2也会被关闭吧。
      

  12.   

    不会,代码确认过的,close()要写在初始化后面。
      

  13.   

    Form2 NewForm=New Form2();
    this.hide();
    NewForm.ShowDialog();
    This.Dispose();然后,showdialog之后如果不把NewForm关闭是不会触发this.Dispose()事件的,结果还是只起到了this.hide()的作用。
      

  14.   

    to : sean840610(更木剑八) 
    重新写了一个Form2 的构造函数,按你的步骤这样做结果Form2跟Form1一起退出了。
    public Form2(Form1 fm)
    {
    //
    // Required for Windows Form Designer support
    //
    InitializeComponent(); //
    // TODO: Add any constructor code after InitializeComponent call
    //
    fm.Close();
    }-----------------------------------------然后,showdialog之后如果不把NewForm关闭是不会触发this.Dispose()事件的,结果还是只起到了this.hide()的作用。NewForm 使用的是 ShowDialog(),执行到这个地方,NewForm已经关闭了。
      

  15.   

    在2003里面,如果你想关闭的窗体是启动窗体的话,肯定不能close了,那样程序就退出了。所以你只能在new后hide自已了。不知道2005是不是这样。
      

  16.   

    //Form1 中的代码
    //在一个按钮中
    Form2 fm = new Form2(this);
    fm.Show();
    //Form2 中
    public Form2(Form1 fm)
    {
    InitializeComponent();
    fm.Close();
    }
    ------------------------
    效果不对,哪里问题?
      

  17.   

    在2003里面,如果你想关闭的窗体是启动窗体的话,肯定不能close了,那样程序就退出了。所以你只能在new后hide自已了。不知道2005是不是这样
    ----------------------------------------------------
    恩,我也是在2003测试的。
    sean840610(更木剑八)用的是2005吧?
      

  18.   

    要走了,不陪你研究了,有结果了说一声。
    估计在Form2关闭Form1,From2不被关闭的可能性不大。
      

  19.   

    VB.net 里面有 工程 属性 -- "关机模式" 
    C# 就不太清楚了
      

  20.   

    非要在form1里面打开form2吗?
    换个方式
    在class1中打开form1
    在Form1中定义一个事件告诉class1:"把form2并打开把我关了"
    然后再由class1把form2打开不就是了
      

  21.   

    Dim newwindow As New FrmMain
            newwindow.Show()
            Me.Finalize()
      

  22.   

    这是一个很简单的登录窗口应用呀。。
    登录后原来的关闭 Dim newwindow As New FrmMain
            newwindow.Show()
            Me.Finalize()
      

  23.   

    QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ
      

  24.   

    你这样写肯定是不行的,在写下面的代码的Form中有以下代码:
    /// <summary>
    /// 应用程序的主入口点。
    /// </summary>
    [STAThread]
    static void Main() 
    {
    Application.Run(new Form1());
    }
    以上代码是创建一个运行的主线程,你使用This.Close()时就关闭了此进程,所以程序退出。在应用程序若要实现你要做的,需要把上边的代码移动到其他的你一直都不要关闭的主FORM中就可以了,再将代码修改为以下即可:[STAThread]
    static void Main() 
    {
    Form1 m = new Form1();
    m.ShowDialog();
    Application.Run(new Form2());//Form2是你一直都不要关闭的主窗体。
    }
      

  25.   

    Form2 fm=new Form2();
    fm.Show();
    this.Visible=false;
    这样就可以了
      

  26.   

    只能是把父窗口 隐藏 或者是 置为不可见 因为程序运行开始就是 最先调用父窗口 把父窗口关了 整个程序都关了
    上面 ba_jiang()说的很对啊
      

  27.   

    Form2 fm=new Form2();
    fm.Show();
    this.dispose();
    我一直都是用这样的方法
      

  28.   

    To:sdpdww
    我按你的方法试了一下,还是整个应用程序都被关了!
      

  29.   

    To:ba_jiang
    我按你的方法也试了,思路应该是正确的,只是在我关闭了Form1之后,一下子出现了两个同样的Form2窗口,只要关闭一个,另一个也关闭了。但是我感觉你的方法应该是正确的。不知道还要修改哪里
      

  30.   

    我常用 this.hide();,没问题的
    建议把Main()函数放在另外一个.cs文件里,一般默认是在Form1中,楼上的"sdpdww"做法得到的效果是打开一个FORM,然后把主程序关了,就犹如没了爹,怎么还能生个孩子??
      

  31.   

    完美解决方案:
    1. 首先你得这种编程思路有些绕,因为通常的windows程序是以主窗口加多个字窗口方式运行的。我初期在编写wince程序时和你有同样的想法。最后重新设计了整个程序的框架,完美解决。
    2. 如果非要这样做,以下方法是比较完美的方案:
    关闭form1,弹出form2;关闭form2,整个程序关掉:
    如果在vs2003中,新建一个.cs文件,把main()函数剪到里面,如果在vs2005中,直接改program.cs
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false); Form1 fm1 = new Form1();
    Application.Run(fm1 );
    Form2 fm2 = new Form2();
    Application.Run(fm2);
    }
    }
      

  32.   

    To:echosong2008
    问题已经得到完美解决。加你分!
    谢谢大家,结贴
      

  33.   

    关闭form1,弹出form2;关闭form2,整个程序关掉:
    如果在vs2003中,新建一个.cs文件,把main()函数剪到里面,如果在vs2005中,直接改program.cs
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);Form1 fm1 = new Form1();
    Application.Run(fm1 );
    Form2 fm2 = new Form2();
    Application.Run(fm2);
    }
    }没办法,人长得就那样,改来改去不如用原相!希望不要令你感觉刺眼!
      

  34.   

    ...
    哎,怎么感觉你们都爱钻牛角尖...应该这样:
    把FROM2设为启动页面,
    然后在FROM2_LOAD里面的第一句就SHOW一个FROM1的模式对话框出来...FROM1不关闭FROM2自然不会显示出来.
    狂汗!!!
      

  35.   

    只要关闭Application.Run中打开的窗休,那么主程序就退出了
    如果你是要登录窗体或初始化窗体,用下面的方法OnLoad方法是Application.Run中运行的
    frmInit 为初始化窗体,frmInit不要调用Close()方法,
    关闭frmInit 时应该使用DialogResult===\\\
     protected override void OnLoad(EventArgs e)
            {
                frmInit frminit = new frmInit();
                //指明了初始化窗体的父级
                frminit.Owner = this;
                if (frminit.ShowDialog(this) == DialogResult.OK)
                {
                   //你的代码
                }// end if
                else
                {
                    this.Close();
                    this.Dispose();
                    Application.Exit();
                }// end else if
                base.OnLoad(e);
            }// end void
      

  36.   

    晕呼,你为什么要这么做呢,其实你只要搞个多线程,在关闭Form1前打开Form2的辅助线程这样的话主进程是不会关闭的哦!
      

  37.   

    第二个new出来,不要show,delete第一个,再show第二个。
      

  38.   

    我想找的答案阿
    可惜怎么没有呢
    会全部的楼上:
    Environment.Exit(0).行不行