【问题标题】:Form1 keeps showingForm1 一直显示
【发布时间】:2015-09-16 08:31:29
【问题描述】:

我是 C# 新手。有一个注册项目的登录系​​统。表格有问题。

我有 2 个表格,表格 1 和表格 2。 Form1 是我的主要表单,我的登录表单。 Form2是注册表。

这就是应用程序的运行方式: 在form1显示之前,首先要满足一个条件。如果满足条件,将出现消息框,然后将显示 form2。但是,不满足条件时会显示form1。

所以问题是,尽管满足条件,form1 仍然显示。 Form2 出现了,但是 form1 也出现了。

private void Form1_Load(object sender, EventArgs e)
{
    if (condition)
    {
        MessageBox.Show("Message");
        this.Hide();
        Form2 frm = new Form2();
        frm.Show();
    }
}

【问题讨论】:

标签: c# forms winforms


【解决方案1】:

一开始你不应该在Form_LoadForm1 中做这种事情。从逻辑上讲,最有意义的做法是先测试您的条件,如果您不打算使用它,则永远不要实例化 Form1

Program.cs里面,如果没改的话,应该有下面这行代码:

Application.Run(new Form1());

您应该用一些代码替换该行以测试您的条件并确定从哪个表单开始:

    if (condition)
    {
        MessageBox.Show("Message");
        Application.Run(new Form2());
    }
    else
    {
        Application.Run(new Form1());
    }

【讨论】:

    【解决方案2】:

    您的问题似乎是load 事件在表单可见之前触发。所以从技术上讲,此时它没有任何可见的东西可以隐藏。

    参考此帖:why isn't this.Hide() working in Form1_load event?

    【讨论】:

    • condition 因缺陷而为假
    • @Zero,好吧,如果我们通过 OP 的实际代码,我们可以假设 condition 确实是正确的,因为 form2 仍然显示。无论condition 是什么,form1 也将继续可见。
    • 我同意你的看法。只是澄清了这一点,因为如果它解决了您所指出的问题,它将无法正常工作。
    【解决方案3】:

    有很多方法可以做到,但我首选的实现登录表单的方法是:

    [STAThread]
    static void Main()
    {
        if (new FormLogin().ShowDialog() == DialogResult.OK)
        {
            Application.Run(new FormMain());
        }
    }
    

    以及登录按钮的登录表单中的典型处理方法:

    private void btnLogin_Click(object sender, EventArgs e)
    {
        if (CheckUserPassword())
        {
            this.DialogResult = System.Windows.Forms.DialogResult.OK;
        }
        else MessageBox.Show("Login failed!");
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      • 2016-09-01
      • 1970-01-01
      相关资源
      最近更新 更多