关闭表单并转到其他表单的最佳方式是什么。
目前我有一份主表格,然后有两种表格:
我想知道如何关闭一个表单并有效地打开另一个表单。我做了两次有一个不同的结果:
我的应用程序中的主要表单只是介绍,它将加载一些公司徽标并显示一个进度条,然后将其带到登录表单,其中我有一个登录按钮,从实际位置申请将开放。
我有一些问题。在主表格中,我添加了以下代码:
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()
。在第一种情况下,它运行正常。在第二种情况下,它会处理所有表单。
答案 0 :(得分:4)
尝试:
form.Show();
不
form.ShowDialog(this);
这就是模态的原因。
答案 1 :(得分:2)
ShowDialog()是阻止调用,所以如果在一个Form的deactivate事件中你调用另一个的ShowDialog(),你的父窗体将不会完成它的停用。
就像一个建议我可以给你创建一个你想要管理的表单集合/堆栈,并将它控制到一个FormManager类,在那里你可以实现你想要的任何逻辑,并可以调用ShowDialog()或Show()。换句话说,带出表单显示/隐藏管理表单本身。
问候。