当我的项目启动时,Form1加载并检查程序许可证与服务器,如果一切正常,它应该:显示Form2并关闭Form1。之后,当用户使用“x”关闭Form2时,程序应该结束。
您认为最好的方法是什么?
到目前为止只有形式2。显示:)
...
if (responseFromServer == "OK")
{
Form2 form2 = new Form2();
form2.Show();
}
谢谢!
答案 0 :(得分:4)
我使用这样的东西。代码位于 Program.cs
中public static bool IsLogged = false;
Application.Run(new FUserLogin());
if (!isLogged)
Application.Exit();
else
Application.Run(new FMain());
答案 1 :(得分:4)
您可能知道如果使用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
}
}
答案 2 :(得分:3)
您可以使用ShowDialog显示第一个表单,它将一直阻止,直到表单关闭。在Form1内部,您可以在完成处理时调用this.Close(),并设置DialogResult属性,或者(可能更干净)您可以创建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和退出应用程序的代码都集成在一个地方,并且很容易被注释掉用于开发或测试。
答案 3 :(得分:1)
尝试隐藏Form1:
this.Hide();
然后在Form2的FormClosing事件中:
Form2_FormClosing(object sender, EventArgs e)
{
Application.Exit();
}
答案 4 :(得分:1)
试试这个
//Form1 code
if (responseFromServer == "OK")
{
this.Hide();
Form2 frm = new Form2();
frm.Show();
}
您可以使用Form2的表单结束事件中的Application.Exit()方法退出应用程序
答案 5 :(得分:1)
//Login Form Load Events or Constructor
this.Close(); //first Close Login From
Application.Run(new Main());//second Run Main Form