Winform Forms关闭并打开一个新表单

时间:2009-11-05 00:03:11

标签: c# winforms forms

1. frmHome frm = new frmHome();
   frm.Show();
   this.Close();

我正在HomeForm开启LoginForm。在LoginForm的{​​{1}}活动中,我致电form_closed。这样您就可以打开Application.Exit()并点击LoginForm按钮退出应用程序。

问题是,当我从X转到LoginForm并致电HomeForm时,this.Close()触发了form_closed个事件并且应用程序将关闭。< / p>

我被允许一次只显示一个表格。

8 个答案:

答案 0 :(得分:12)

您可以在LoginForm

中使用布尔值(全局变量)作为退出标志

将其初始化为:

exit = true;//in constructor

在关闭之前将其设置为false:

frmHome frm = new frmHome();
frm.Show();
exit = false;
this.Close();

form_closed

if(exit) Application.Exit();

如果用户使用'X'按钮关闭表单,exit的值为true,则会调用Application.Exit()

编辑:

上述内容无效,因为LoginFormApplication.Run(loginForm)使用的主要表单。

2条建议:

使用exit标记:

替换

Application.Run(new LoginForm())

通过

LoginForm loginFrm = new LoginForm();
loginFrm.Show();
Application.Run();

没有exit标记:

替换当前代码:

frmHome frm = new frmHome();
frm.Show();
this.Close();

通过

frmHome frm = new frmHome();
this.Visible = false;
frm.ShowDialog();
this.Close();

答案 1 :(得分:7)

在program.cs中:

void Main() {
  frmLogin fl = new frmLogin();
  if (fl.ShowModal() == DialogResult.Ok) {
    frmHome fh = new frmHome();
    fh.Show();
  }
}

答案 2 :(得分:1)

你可以强制表单隐藏,而不是关闭。 而不是捕获form_closed事件,捕获form_closing事件。 它会看起来像这样。

private void LoginFrm_Closing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    this.Hide();
    frmHome frm = new frmHome();
    frm.Show();
}

这将保持两个开放,但只有一个可见。 frmHome中的某个地方,可能是一个用于保存LoginFrm的公共变量,因此您可以使用Hide()在两者之间切换;和Show(); (以及您可能希望添加的任何其他表格)

编辑:语法。

答案 3 :(得分:1)

您需要做的就是关闭2个表单而不会出现问题。             Form1 fin = new Form1();             fin.Close();             this.Visible = false;             Form2 win = new Form2();             win.Visible = true;

答案 4 :(得分:1)

尝试它可以帮助你

frmHome frm = new frmHome();
this.hide()
frm.ShowDialog();
this.Close();

答案 5 :(得分:0)

实现这一目标的一种方法:

  1. 启动时打开主窗体。
  2. 隐藏它。 (实际上是可选的,但如果你真的不能显示多个表格,则不适合你。)
  3. 使用ShowDialog();
  4. 打开您的登录表单
  5. 如果登录成功,则显示您的主表单。如果没有,请关闭主表单/应用程序。

答案 6 :(得分:0)

为什么不停止在form_closed事件中调用application.exit?

我不确定你是否真的需要它,如果你这样做,你可以从屏幕上删除x图标并给它们一个关闭按钮。

或者,事件args中有一个CloseReason,它会告诉您是否是关闭表单或代码的用户。

答案 7 :(得分:0)

我不太确定我是否理解这一点,如果您想循环使用特定的表单顺序,也许你可以做这样的事情:(伪代码)

Dim formsList as New List(Of form)
formsList.add(Form1)
formsList.add(Form2)
formsList.add(Form3)
' etc etc etc '

For Each f as Form in formsList

    f.ShowDialog()
    ' you could have a condition here which breaks the for loop perhaps '

Next

Me.close ' close the app '

你可以在For循环中添加一个条件,它会使for循环中断,以便提前结束......

注意:抱歉vb.net代码......但是它应该很容易理解