简单弄了俩winform窗体,其中一个加个panel,在鼠标点击事件中跳转到另外页面,然后刚开始的窗体关闭,            Form2 f2 = new Form2();
            Form1 f1 = new Form1();
            f2.Show();
             f1.Close(); 
不过刚开始的窗口不关闭,也就是f1不会关闭,这是为啥捏

解决方案 »

  1.   

    因为f2.show()之后,程序执行到了f2窗体里去了,所以如果你想先打开f2,然后再关闭f1,可以在f2的窗体加载中去做
      

  2.   


    Form2 f2 = new Form2();
    // Form1 f1 = new Form1();f2.Closed += (obj, args) => { Application.Exit(); };f2.Show();
    // f1.Close();
    this.Close();// program.cs -> sub main
    // Application.Run(new Form1());
    Application.Run();
      

  3.   

    我试了下,不知道到怎么不行,而且form2完全把form1盖住了,拖动form2后还可以看见form1,form1不管是隐藏还是在form2加载时
            private void Form2_Load(object sender, EventArgs e)
            {
                this.panel1.BackColor = Color.Transparent;
                this.panel2.BackColor=Color.Transparent;
                this.panel3.BackColor = Color.Transparent;
                Form1 f1 = new Form1();
                f1.Close();
            }
    form1还是在form2的背后
      

  4.   


    概念不清!Form1 f1 = new Form1(); --> 定义一个新的 From1
    f1.Close(); --> 将新定义的 Form1 关闭这个 11 仅仅做了定义并实例化 没有参与任何操作 也没有显示就被关闭了仔细看看上面我给你的代码
      

  5.   

      Form2 f2 = new Form2();
      Form1 f1 = new Form1();
      f1.Close();  
     Application.Run(new Form2());关闭后 在来。
      

  6.   

    f2.Closed += (obj, args) => { Application.Exit(); };
    这个我不太理解
      

  7.   

    有点无语...首先 program.cs 中[STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);    // 自动生成的代码是这样的
        // Application.Run(new Form1());    // 表示 实例化一个新的 Form1 并显示之 此时程序进入消息循环
        // 一旦 Form1 被关闭则程序也随之关闭了
        // 为了让程序在 Form1 关闭后可以继续运行 需要修改下    new Form1().Show();
        Application.Run();    // 这样做就能避免 Form1 被关闭后程序自动退出了    // 但这样做的风险是什么呢?
        // 一旦用户忘记了 Application.Exit();
        // 则程序在所有窗口关闭后 其进程仍然没有结束
        // 所以 Application.Exit(); 这行代码是需要手动添加的
    }
    第二 由于 Form1 已经被实例化,那么原有代码Form2 f2 = new Form2();
    Form1 f1 = new Form1();
    f2.Show();
    f1.Close(); 中定义的 f1 对当前已显示的 Form1 是没有影响的,由于没有加入代码 f1.Show(); 
    所以新定义的 f1 没有显示,你看到的 Form1 仍然是 Program.cs 中定义的那个这下你该明白了吧~至于f2.Closed += (obj, args) => { Application.Exit(); };
    等价于private void f2_Closed(object sender, EventArgs e)
    {
        Application.Exit();
    }
    可能是 Framework 版本不同 具体那个版本才支持的 记不清了你改成
    private void Panel1_Click(object sender, EventArgs e)
    {
        Form2 f2 = new Form2();
        f2.Closed += new EventHandler(this.f2_Closed);
        f2.Show();
        this.Close();
    }private void f2_Closed(object sender, EventArgs e)
    {
        Application.Exit();
    }