c# 两个窗体之间跳转
程序员文章站
2022-06-10 10:56:56
...
之前自己试了下,发现窗体1跳转至窗体2时,有两种情况:
- 打开窗体2后,窗体1仍然存在。 在从窗体2打开窗体1,窗体2仍然存在,有两个窗体1。 出现这样的原因是因为打开另外一个窗体时没有关闭原来的窗体。
- 从窗体1打开至窗体2后, 关闭窗体1,但是发现关闭窗体1就会关闭整个程序,这是因为
Application.Run(new Form1());
这句代码 ,意思是一旦关闭Form1 就会关闭整个程序。
首先 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, 并关闭Form1。
private void Form1_button_Click(object sender, EventArgs e)
{
Form2 f= new Form2();
f.Show();
this.Close(); //关闭Form1
}
Form2中设置一个按钮,点击跳转至Form1,并关闭Form2。 这里还有三种关闭程序的方法,为什么关闭这么麻烦呢?请看Program.cs中的注释
private void form2_button_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
form1.Show();
this.Close(); //关闭Form2
}
//关闭程序方法一:form2 的关闭按钮,点击次按钮,关闭所有程序
private void form2_CloseButton_Click(object sender, EventArgs e)
{
Application.Exit(); //程序整体全部关闭
}
//关闭程序方法二:通过Closing事件来关闭程序。 还需要去属性中开启Closing事件
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("确定要退出本系统吗?", "警告", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
{
this.Dispose();
Application.Exit();
}
else
{
e.Cancel = true; //不关闭窗口 //关闭窗口 e.Cancel = false;
}
}
//关闭程序方法三:通过Closed事件来关闭程序,点关闭窗体后触发此事件,还需要设置form2中的属性,开启FormClosed。
private void Form2_FormClosed(object sender, FormClosingEventArgs e)
{
Application.Exit();
// MessageBox.Show("关闭成功");
}
下一篇: 浅谈C++11中=delete的巧妙用法