结束和开放表格

时间:2011-07-19 19:16:04

标签: c# .net winforms

关闭表单并转到其他表单的最佳方式是什么。

目前我有一份主表格,然后有两种表格:

我想知道如何关闭一个表单并有效地打开另一个表单。我做了两次有一个不同的结果:

我的应用程序中的主要表单只是介绍,它将加载一些公司徽标并显示一个进度条,然后将其带到登录表单,其中我有一个登录按钮,从实际位置申请将开放。

我有一些问题。在主表格中,我添加了以下代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        int i;

        for (i = 0; i <= 100; i++)
        {
            progressBar.Value = i;
            label1.Text = "Please wait while Refresh loads up...";
        }
    }

    private void progressTimer_Tick(object sender, EventArgs e)
    {
        this.Close();            
    }

    private void MainForm_Deactivate(object sender, EventArgs e)
    {
        Form form = new FirstForm();
        form.ShowDialog(this);
    }

1)这样可以正常工作,只是打开的新表单位于任务栏并且不在屏幕的中心(因为我设置了它的属性)。如何修复此问题?

在First Form中,我添加了以下代码:

    private void loginButton_Click(object sender, EventArgs e)
    {
        using( ERPQueries eq = new ERPQueries())
        {
            int? count = eq.CheckEmployee(userTextBox.Text,passwordTextBox.Text);
            if (count == 1)
            {
                //testLabel.Text = "Ok";
                this.Close();
                Form form = new SecondForm();
                form.ShowDialog(this);
            }
            else
            {
                testLabel.Text = "Invalid username or password!";
            }
        }
    }

2)这里下一个Form弹出屏幕的中心。我想知道它与第一种情况有什么不同,因为我在两种情况下都使用了showDialog()?

3)同样在第一种情况下,我的主表格消失,而在第二种情况下,第一种表格仍然在后台可见,并且只有在关闭SecondForm后才会消失。

我确定我犯了很多错误,我的代码存在缺陷。请帮助。这是我第一次使用多种形式制作应用程序。

编辑:

当我使用Show()代替ShowDialog()时,我看不到新的形式。我遗失了什么? 我尝试了this.Dispose()而不是this.Close()。在第一种情况下,它运行正常。在第二种情况下,它会处理所有表单。

2 个答案:

答案 0 :(得分:4)

尝试:

form.Show();

form.ShowDialog(this);

这就是模态的原因。

答案 1 :(得分:2)

ShowDialog()是阻止调用,所以如果在一个Form的deactivate事件中你调用另一个的ShowDialog(),你的父窗体将不会完成它的停用。

就像一个建议我可以给你创建一个你想要管理的表单集合/堆栈,并将它控制到一个FormManager类,在那里你可以实现你想要的任何逻辑,并可以调用ShowDialog()或Show()。换句话说,带出表单显示/隐藏管理表单本身。

问候。