在C#中切换窗体
本文关键字:窗体 | 更新日期: 2023-09-27 17:57:32
当程序的自动生成代码启动时,它会调用
Application.Run(new Form1());
并启动CCD_ 1。我有另一个表格,我想切换到并同时关闭Form1
。问题是,如果在用Form.ShowDialog()
调用另一个表单之前,在Form1
中使用this.Close()
,则程序结束。如果我把它放在ShowDialog
之后,那么它一直在后台,直到我关闭Form2
,这时程序结束。
如何在关闭当前打开的帧的同时生成Form2
的副本?
编辑:我也尝试过用Form1
0调用Form2
,但新帧会立即关闭。
下面的解决方案如您所期望的那样工作。
若要尝试此示例代码,请在Visual Studio中创建一个新的WinForms应用程序(即"文件"-->"新建项目",选择"Visual C#"-->"Windows Classic Desktop"并使用模板"Windows Forms App(.NET Framework)"),然后添加2nd形式。
确保这两个表单分别命名为Form1
和Form2
,然后按如下方式修改生成的解决方案中的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.FormClosed +=
new System.Windows.Forms.FormClosedEventHandler(this.Form1_FormClosed);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
(new Form2()).Show();
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
this.FormClosed +=
new System.Windows.Forms.FormClosedEventHandler(this.Form2_FormClosed);
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
}
这是应用程序的入口点,修改如下:
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Show first form and start the message loop
(new Form1()).Show();
Application.Run(); // needed, otherwise app closes immediately
}
}
诀窍是在不带参数的情况下使用Application.Run(),在要退出应用程序的位置使用Application.Exit()。
现在,当您运行应用程序时,Form1
将打开。单击X(右上角),Form1关闭,但Form2
出现。再次单击X,表单将关闭(并退出应用程序)。
您也可以创建一个按钮Button1来完成这项工作,而不是将Form2
的启动放入FormClosed事件中,但在这种情况下,不要忘记通过this.Close()
显式关闭按钮所属的窗体:
private void button1_Click(object sender, EventArgs e)
{
(new Form2()).Show(); this.Close();
}
您需要调用使其不可见但仍然打开的this.Hide()
,而不是关闭它的this.Close()
(因为它是应用程序的主要形式,所以也关闭应用程序)。
在同一个谷歌上发现了这个问题和一个代码项目。
作者基本上创建了一个顶级表单,用于管理他想要显示的表单之间的切换。