Form1不断显示

时间:2015-06-29 18:39:48

标签: c# forms winforms

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

我有2个表单,form1和form2。 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();
    }
}

3 个答案:

答案 0 :(得分:2)

你不应该在Form_Load Form1开始做这类事情。从逻辑上讲,首先测试你的病情是最有意义的,如果你不打算使用它,就不要实例化Form1

Program.cs内,如果您还没有改变它,您应该拥有以下代码行:

Application.Run(new Form1());

您应该使用某些代码替换该行以测试您的情况并确定要启动的表单:

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

答案 1 :(得分:1)

您的问题似乎是load事件在表单可见之前触发的事实。从技术上讲,在这一点上它没有隐藏的东西。

提到这篇文章:why isn't this.Hide() working in Form1_load event?

答案 2 :(得分:1)

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

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

登录按钮的登录表单中的典型处理程序方法:

using (var context = new PrincipalContext(ContextType.Domain, "TRY.local"))
{
    using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
    {
        foreach (var result in searcher.FindAll())
        {
            DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
            Library.WriteErrorLog("First Name: " + de.Properties["givenName"].Value);
            try{
                string name = (string)de.Properties["samaccountname"].Value;
                PrincipalContext ctx = new PrincipalContext(ContextType.Domain,"TRY.local","CN="+name+",OU=Users,DC=TRY,DC=local","administrator","password");
                UserPrincipal usr = UserPrincipal.FindByIdentity(ctx, name);
                if(usr!=null){
                    Library.WriteErrorLog("IsAccountLockedOut\t"+usr.IsAccountLockedOut());
                }
                usr.Dispose();
                ctx.Dispose();
            }
        catch(Exception e){                                         
            Library.WriteErrorLog(e);
        }
    }
}