C#,如何隐藏一个表单并显示另一个表单?

时间:2011-07-12 15:03:03

标签: c# .net winforms

当我的项目启动时,Form1加载并检查程序许可证与服务器,如果一切正常,它应该:显示Form2并关闭Form1。之后,当用户使用“x”关闭Form2时,程序应该结束。

您认为最好的方法是什么?

到目前为止只有形式2。显示:)

...
if (responseFromServer == "OK")
{
    Form2 form2 = new Form2();
    form2.Show();
}

谢谢!

6 个答案:

答案 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