winform窗体的跳转

乞一世 2011-07-21 08:39:31
简单弄了俩winform窗体,其中一个加个panel,在鼠标点击事件中跳转到另外页面,然后刚开始的窗体关闭,

Form2 f2 = new Form2();
Form1 f1 = new Form1();
f2.Show();
f1.Close();
不过刚开始的窗口不关闭,也就是f1不会关闭,这是为啥捏
...全文
705 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
龍过鸡年 2011-07-21
  • 打赏
  • 举报
回复
有点无语...

首先 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();
}



乞一世 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qqamoon 的回复:]
C# code


Form2 f2 = new Form2();
// Form1 f1 = new Form1();

f2.Closed += (obj, args) => { Application.Exit(); };

f2.Show();
// f1.Close();
this.Close();




C# code


// program.c……
[/Quote]
我不是很理解,不过我试了下代码,报错了
乞一世 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qqamoon 的回复:]
C# code


Form2 f2 = new Form2();
// Form1 f1 = new Form1();

f2.Closed += (obj, args) => { Application.Exit(); };

f2.Show();
// f1.Close();
this.Close();




C# code


// program.c……
[/Quote]
f2.Closed += (obj, args) => { Application.Exit(); };
这个我不太理解
言多必失 2011-07-21
  • 打赏
  • 举报
回复
Form2 f2 = new Form2();
Form1 f1 = new Form1();
f1.Close();
Application.Run(new Form2());

关闭后 在来。
龍过鸡年 2011-07-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 taotao19901011 的回复:]
简单弄了俩winform窗体,其中一个加个panel,在鼠标点击事件中跳转到另外页面,然后刚开始的窗体关闭,

Form2 f2 = new Form2();
Form1 f1 = new Form1();
f2.Show();
f1.Close();
不过刚开始的窗口不关闭,也就是f1……
[/Quote]

概念不清!

Form1 f1 = new Form1(); --> 定义一个新的 From1
f1.Close(); --> 将新定义的 Form1 关闭

这个 11 仅仅做了定义并实例化 没有参与任何操作 也没有显示就被关闭了

仔细看看上面我给你的代码

xuexiaodong2009 2011-07-21
  • 打赏
  • 举报
回复
form1.bringtoFront();试试
乞一世 2011-07-21
  • 打赏
  • 举报
回复
我试了下,不知道到怎么不行,而且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的背后
龍过鸡年 2011-07-21
  • 打赏
  • 举报
回复

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();
乞一世 2011-07-21
  • 打赏
  • 举报
回复
哦,谢谢了呵呵
chengjia2284 2011-07-21
  • 打赏
  • 举报
回复
因为f2.show()之后,程序执行到了f2窗体里去了,所以如果你想先打开f2,然后再关闭f1,可以在f2的窗体加载中去做
fsh1985 2011-07-21
  • 打赏
  • 举报
回复
你要把F1.Hide(),而不是close()

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧