首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >c#是否打开一个新窗体,然后关闭当前窗体?

c#是否打开一个新窗体,然后关闭当前窗体?
EN

Stack Overflow用户
提问于 2011-04-05 15:45:38
回答 16查看 301.9K关注 0票数 99

例如,假设我在form 1中,那么我想:

  1. 打开form 2(从form 1中的按钮打开)
  2. 关闭form 1
  3. Focus on form 2
EN

回答 16

Stack Overflow用户

发布于 2012-11-20 02:30:28

史蒂夫的解决方案不起作用。当调用this.Close()时,当前表单与form2一起被释放。因此,您需要隐藏它并将form2.Closed事件设置为调用this.Close()。

代码语言:javascript
复制
private void OnButton1Click(object sender, EventArgs e)
{
    this.Hide();
    var form2 = new Form2();
    form2.Closed += (s, args) => this.Close(); 
    form2.Show();
}
票数 204
EN

Stack Overflow用户

发布于 2017-06-23 19:28:26

其他答案已经描述了许多不同的方法。然而,它们中许多要么涉及ShowDialog(),要么form1保持开放但隐藏。在我看来,最好、最直观的方法是简单地关闭form1,然后从外部位置(即不是从这两个表单中的任何一个)创建form2。在Main中创建form1的情况下,可以简单地使用Application.Run创建form2,就像之前的form1一样。下面是一个示例场景:

我需要用户输入他们的凭证,以便我以某种方式验证他们。之后,如果身份验证成功,我希望向用户显示主应用程序。为了实现这一点,我使用了两个表单:LogingFormMainFormLoginForm具有确定身份验证是否成功的标志。然后,此标志用于决定是否创建MainForm实例。这两个表单都不需要知道另一个表单,并且这两个表单都可以优雅地打开和关闭。以下是实现此操作的代码:

代码语言:javascript
复制
class LoginForm : Form
{
    public bool UserSuccessfullyAuthenticated { get; private set; }

    void LoginButton_Click(object s, EventArgs e)
    {
        if(AuthenticateUser(/* ... */))
        {
            UserSuccessfullyAuthenticated = true;
            Close();
        }
    }
}

static class Program
{
    [STAThread]
    static void Main()
    {
        LoginForm loginForm = new LoginForm();
        Application.Run(loginForm);

        if(loginForm.UserSuccessfullyAuthenticated)
        {
            // MainForm is defined elsewhere
            Application.Run(new MainForm());
        }
    }
}
票数 29
EN

Stack Overflow用户

发布于 2012-11-30 09:05:23

试着这样做。

代码语言:javascript
复制
{
    this.Hide();
    Form1 sistema = new Form1();
    sistema.ShowDialog();
    this.Close();
}
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5548746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档