c#,如何隐藏一个窗体并显示另一个窗体
本文关键字:窗体 一个 显示 另一个 隐藏 何隐藏 | 更新日期: 2023-09-27 18:02:31
当我的项目启动时,Form1加载并与服务器检查程序许可,如果一切正常,它应该:显示Form2并关闭Form1。之后,当用户使用"x"关闭Form2时,程序将结束。
你认为最好的方法是什么?
到目前为止只得到form2。显示:)
...
if (responseFromServer == "OK")
{
Form2 form2 = new Form2();
form2.Show();
}
谢谢!
你可能知道,如果你使用Form1作为你的主表单,那么你不能关闭它,因为这会关闭应用程序(除非你自定义应用程序的启动方式,但这是更高级的)
一种选择是首先创建Form2作为主表单,但将其隐藏,然后创建并显示Form1,然后当许可证检查完成时,关闭Form1并使Form2可见。
或者您可以从显示Form1开始,然后当许可证检查完成时,调用Form1.Hide()
,然后创建并显示Form2。然后当Form2被用户关闭时,调用Form2中的Form1.Close()
。关闭事件处理程序:
class Form1
{
private void Form1_Load(object sender, EventArgs e)
{
// do the license check,
// and then when the license check is done:
if (responseFromServer == "OK")
{
Form2 form2 = new Form2();
Form2.FormClosed += new FormClosedEventHandler(Form2_FormClosed);
Form2.Show();
this.Hide();
}
else
this.Close();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
this.Close(); // will exit the application
}
}
我使用这样的东西。代码在Program.cs
public static bool IsLogged = false;
Application.Run(new FUserLogin());
if (!isLogged)
Application.Exit();
else
Application.Run(new FMain());
您可以使用ShowDialog显示第一个表单,它将阻塞直到表单关闭。在Form1内部,您可以在完成处理时调用this.Close(),并设置dialgresult属性,或者(可能更简洁)您可以创建Form1在关闭前设置的公共属性,并让调用者检查。然后,您可以直接从Main返回,或者继续实例化您的新类并将其传递给Application.Run()。
static class Program
{
[STAThread]
static void Main()
{
var form1 = new Form1();
var result = from1.ShowDialog(); // Form1 can set DialogResult, or another property to indicate success
if (result != DialogResult.OK) return; // either this
if (!form1.ValidationSuccessful) return; // or this
Application.Run(new Form2());
}
}
我喜欢这样,因为您没有从Form1引用Form2,处理显示Form1和退出应用程序的所有代码都整合在一个地方,并且可以很容易地为开发或测试注释掉。
尝试隐藏Form1:
this.Hide();
然后在Form2的FormClosing事件中:
Form2_FormClosing(object sender, EventArgs e)
{
Application.Exit();
}
试试这个
//Form1 code
if (responseFromServer == "OK")
{
this.Hide();
Form2 frm = new Form2();
frm.Show();
}
你可以在Form2的窗体关闭事件中使用application . exit()方法退出应用程序
//Login Form Load Events or Constructor
this.Close(); //first Close Login From
Application.Run(new Main());//second Run Main Form