【问题标题】:About form closing at runtime in C#关于 C# 运行时关闭表单
【发布时间】:2011-05-03 06:39:49
【问题描述】:

我在 c# 的项目中有两个名为 frmRegistrationfrmMain 的表单。

我已将frmRegistration 设置为我的开始表单
用户在frmRegistration 表单中输入数据并按下提交 按钮进行注册。然后,我想关闭frmRegistration 表单并向用户显示frmMain 表单。
我正在尝试使用frmRegistrationDispose() 方法。但是,当我使用此方法时,它会处理我所有的应用程序执行,因为frmRegistration 是启动表单。

我不希望这种情况发生。谁能解决这个问题?

谢谢。

【问题讨论】:

  • 为什么不用form.close()方法?

标签: c# winforms formclosing


【解决方案1】:

使用Show()Hide() 方法。

    private void btnSubmit_Click(object sender, EventArgs e)
    {
      ...
      var frm = new frmMain();
      frm.Location = this.Location;
      frm.StartPosition = FormStartPosition.Manual;
      frm.Show();
      this.Hide();
    }  

更新:
如果您不想在内存中使用 frmRegistration,请在主窗体中启动程序并将其添加到 MainForm 的 Shown 事件中:

    var frm = new frmRegistration();
    frm.Location = this.Location;
    frm.StartPosition = FormStartPosition.Manual;
    frm.FormClosing += delegate { this.Show(); };
    frm.Show();
    this.Hide();  

现在您只需关闭注册表并自动返回主表单。

【讨论】:

  • 这种方法的问题是你总是将 frmRegistraion 保存在内存中,我认为没有必要。
  • AtoMerZ:我同意,frmRegistration 是应该在主窗体中实例化的那个。这更有意义。例如,主窗体中可能有一个登录/注销菜单项,它也会显示frmRegistration 的实例。而且按照 Kamyar 的建议,关闭主窗体不会关闭 frmRegistration,它只会保持隐藏状态,除非有主窗体 FormClosing 事件的侦听器(这只是不必要的额外工作)。
  • 我已经尝试了您的第二个代码。我已经在 frmMain 的 Load() 事件中编写了上面的代码,并且我在 Program.cs 中将 frmMain 设置为我的启动表单。 .当我使用此代码时,我的 frmMain 表单被显示并且我的 frmRegistration 表单被隐藏。但我没有得到我想要的。我想先执行我的 frmRegistration 表单,点击提交按钮后,我想永久关闭该表单,我想打开我的 frmMain 表单。你知道吗?
  • 我使用了你的代码。它显示了所需的结果,但 frmMain 表单显示 1 秒,然后它被隐藏,然后打开 frmRegistration。如果我的 frmMain 表单处于最大尺寸且 frmRegistration 处于正常尺寸,那么它看起来不太好。但感谢您的回复。
【解决方案2】:

尝试将 frmMain 设置为启动表单并在初始时将其隐藏,显示 frmRegistration,执行您必须执行的操作,然后处理它。

【讨论】:

    【解决方案3】:

    您还可以使用Main() 函数将Program.cs 主类更改为启动frmRegistration,并在确认DialogResult 或其他检查后,它将以frmMain 开头 - 作为您的主要表单和消息循环。

    【讨论】:

    • 这可行,但如果 OP 决定在主窗体已经启动后实现登录/注销功能,则会带来额外的复杂性。
    【解决方案4】:

    至少有两种选择: 1.把你的启动表单变成一个单例 当你需要隐藏它时,调用它的 hide 方法

    2.有新的不同的启动窗体,称为MainApp窗体或其他任何形式,将其设置为不可见,您可以对其他非启动窗体进行任何您喜欢的操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 2012-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多