C#,如何隐藏一个窗体并显示另一个窗体?
当我的项目启动Form1时,加载并与服务器检查程序许可证,如果一切正常,它应该:显示Form2并关闭Form1。之后,当用户用“x”关闭Form2时,程序应该结束 你认为最好的方法是什么 到目前为止,只到了form2。Show:)C#,如何隐藏一个窗体并显示另一个窗体?,c#,.net,winforms,C#,.net,Winforms,当我的项目启动Form1时,加载并与服务器检查程序许可证,如果一切正常,它应该:显示Form2并关闭Form1。之后,当用户用“x”关闭Form2时,程序应该结束 你认为最好的方法是什么 到目前为止,只到了form2。Show:) 谢谢 尝试此操作以隐藏Form1: this.Hide(); 然后在Form2的FormClosing事件中: Form2_FormClosing(object sender, EventArgs e) { Application.Exit(); } 试试
谢谢 尝试此操作以隐藏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()方法退出应用程序。代码位于Program.cs中
public static bool IsLogged = false;
Application.Run(new FUserLogin());
if (!isLogged)
Application.Exit();
else
Application.Run(new FMain());
您可能知道,如果使用Form1作为主窗体,则无法关闭它,因为这将关闭应用程序(除非您自定义应用程序的启动方式,但这更高级) 一种选择是首先创建Form2作为主窗体,但将其隐藏,然后创建并显示Form1,然后在许可证检查完成后,关闭Form1并使Form2可见 或者,您可以先显示Form1,然后在许可证检查完成后,调用
Form1.Hide()
,然后创建并显示Form2。然后,当用户关闭Form2时,在Form2.closed事件处理程序中调用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
}
}
您可以使用ShowDialog显示第一个表单,它将一直阻止,直到表单关闭。在Form1内部,您可以在完成处理后调用此.Close(),并设置DialogResult属性,或者(可能更干净)您可以创建一个Form1在关闭前设置的公共属性,并让调用方检查该属性。然后,您可以直接从Main返回,也可以继续实例化新类并将其传递给Application.Run()
我喜欢这一点,因为您不是从Form1中引用Form2,所有用于显示Form1和退出应用程序的代码都整合在一个地方,并且可以很容易地注释掉以供开发或测试。您是否尝试创建初始屏幕?有点像,它会与服务器检查程序是否已购买(如果是),启动Form2并消失。您在加载事件中发布的代码是否在Form1上?如果表单不需要再次显示,则不确定这是最佳方式。>>>Application.Exit();这可以杀死整个应用程序。谢谢我想这也是我应该做的,虽然我会用Form1上的属性替换static,但那只是我自己。我没有意识到Form.ShowDialog()创建了自己的消息循环。那很酷+1.
//Login Form Load Events or Constructor
this.Close(); //first Close Login From
Application.Run(new Main());//second Run Main Form
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());
}
}
//Login Form Load Events or Constructor
this.Close(); //first Close Login From
Application.Run(new Main());//second Run Main Form