简单弄了俩winform窗体,其中一个加个panel,在鼠标点击事件中跳转到另外页面,然后刚开始的窗体关闭, Form2 f2 = new Form2();
Form1 f1 = new Form1();
f2.Show();
f1.Close();
不过刚开始的窗口不关闭,也就是f1不会关闭,这是为啥捏
Form1 f1 = new Form1();
f2.Show();
f1.Close();
不过刚开始的窗口不关闭,也就是f1不会关闭,这是为啥捏
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();
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的背后
概念不清!Form1 f1 = new Form1(); --> 定义一个新的 From1
f1.Close(); --> 将新定义的 Form1 关闭这个 11 仅仅做了定义并实例化 没有参与任何操作 也没有显示就被关闭了仔细看看上面我给你的代码
Form1 f1 = new Form1();
f1.Close();
Application.Run(new Form2());关闭后 在来。
这个我不太理解
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();
}