c#,如何隐藏一个窗体并显示另一个窗体

本文关键字:窗体 一个 显示 另一个 隐藏 何隐藏 | 更新日期: 2023-09-27 18:02:31

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

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

到目前为止只得到form2。显示:)

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

谢谢!

c#,如何隐藏一个窗体并显示另一个窗体

你可能知道,如果你使用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