【问题标题】:Closing a Dialog Form and Open another form关闭对话框表单并打开另一个表单
【发布时间】:2016-06-03 06:37:25
【问题描述】:

在关闭一个表单并打开另一个表单时,我遇到了(我认为是)一个奇怪的问题。

我在特定表单上有一个按钮(如果有任何区别,则使用.ShowDialog 打开),单击该按钮时,将运行以下代码:

Me.Close()
LC.ShowDialog()

我希望包含按钮的表单应该关闭,LC 表单应该作为对话框表单打开。实际发生的是Me 表单保持打开状态,LC 表单以主要焦点出现在其后面。

为什么会这样?

更新 1

只是为了澄清表格的设置:

  • Form1 以对话框的形式打开me 表单(其中 Form1 是启动时启动的主表单)
  • me 表单打开LC 表单并应在此过程中关闭

【问题讨论】:

  • 一个对话框需要一个所有者窗口,一个可以留在上面的窗口。封闭形式不能是该所有者,因此 Z 顺序事故并非不可能。为什么在调用 Close() 之后仍然可以看到它肯定需要 stackoverflow.com/help/mcve

标签: vb.net winforms


【解决方案1】:

好吧,看来你可能有受孕问题...

让我们解决这个问题,如果你调用 me.close(),你是在要求你的表单自行终止,并杀死他生成的所有表单。 但是,它不是直接的,Windows 消息会发布到您的应用程序,只要您的功能完成,该消息就会被处理。

然后,您创建一个新表单并说要等待它关闭以继续。

我不知道你的目的是什么,但你有几个解决方案:

  • 如果您想在使用 LC 后返回主表单 (Form1):

    Me.Hide()
    LC.ShowDialog()
    =>Your code will pick up here when LC will be closed
    Me.Show()
    
  • 如果您不希望 Form1 再次打开,请不要将其设为您的起始表单,或在 Sub Main() 中开始工作

【讨论】:

  • 谢谢,我将最后一个 Me.show() 更改为 Me.Close() 并且效果很好
【解决方案2】:

使 form1 成为表单的流程管理器。我的意思是,form1 应该打开 lc 并关闭 me。

【讨论】:

  • 我把这两行放在哪个方向都没有关系,问题是一样的。事实上,反过来我希望me 表单保持打开状态,因为另一个表单是对话框,并且在该表单关闭之前不会运行其他代码
【解决方案3】:

您必须从父窗体调用这两个对话框窗体。 你可以这样做:

家长表格

  FirstDialog.Showdialog
  (the app will open this dialog and wait it close)

  SecondDialog.Showdialog

这样做,第二个对话框只会在第一个对话框关闭时打开。 您无法从正在关闭的对话框中启动另一个对话框。

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 2016-05-10
    • 2014-02-02
    • 1970-01-01
    • 2015-12-30
    • 2012-09-22
    • 2018-07-20
    相关资源
    最近更新 更多