【问题标题】:Open Form as ShowDialog But Close Initation Form以 ShowDialog 形式打开表单但关闭启动表单
【发布时间】:2013-11-21 22:47:17
【问题描述】:

除了隐藏然后稍后关闭隐藏的表单之外,还有什么方法可以做到以下几点?

Mainform 打开 SecondForm 作为显示对话框,我需要在关闭 SecondForm 的同时从 SecondForm 打开 ThirdForm,同时在 MainForm 上保持第三个表单充当“showdialog”?

【问题讨论】:

  • 你将不得不更好地描述你想要完成的事情。
  • 不知道如何让主窗体保持打开状态,除非程序关闭,主窗体上有一个按钮可以使用 .showdialog 打开第二个窗体,因此这是唯一可以访问的窗体。在第二个表单中,我需要在关闭第二个表单的同时打开第三个表单并将第三个表单维护为针对主表单的显示对话框,因此用户无法访问主表单。

标签: vb.net winforms


【解决方案1】:

显示 SecondForm() 时,将 MainForm() 作为所有者传递给 ShowDialog():

Public Class MainForm

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim sf As New SecondForm
        If sf.ShowDialog(Me) = Windows.Forms.DialogResult.OK Then
            ' ... do some processing in here ...
        End If
    End Sub

End Class

现在,在 SecondForm() 中,您可以将 ThirdForm() 的所有者设置为 SecondForm() 的所有者:

Public Class SecondForm

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Hide()
        Dim tf As New ThirdForm
        tf.ShowDialog(Me.Owner)
        Me.DialogResult = Windows.Forms.DialogResult.OK
    End Sub

End Class

【讨论】:

  • 这条线是做什么用的? Me.DialogResult = Windows.Forms.DialogResult.OK 我必须担心在某处关闭 me.hide() 吗???
  • 设置 DialogResult() 允许执行返回到最初显示该对话框的 ShowDialog() 行。该值实际上返回给 ShowDialog(),您可以检查它以查看是否返回了“OK”。如果您返回“取消”,那么您的代码可以跳过处理。我会用一个例子来更新代码。
【解决方案2】:

只要第二个表单返回对话结果,您就可以简单地从主表单打开第三个表单

您可能还想查看 MDI,它可以让您更好地控制用户可以做什么和不可以做什么。

【讨论】:

    【解决方案3】:

    在尝试了 Idle_mind 建议后,它仍然给我在表单之间来回显示的问题,不断将它们显示为 .showdialog。我解决了我的问题,就像 tinstaafl 建议的那样。我希望在想出这个方法之前,我能在尝试不同方法的几个小时之前得到他的信息。

    当我关闭每个表单时,我会在主表单中设置一个布尔标志。然后我调用主窗体中的一个子窗体以将下一个窗体显示为主窗体中的 showdialog。我使用在表单中触发逻辑的标志,我正在加载是否绑定数据表中的数据,以便我可以编辑它。

    很抱歉所有这些表格,我知道它会让人感到困惑。总结一下,关闭对话框(me.close),设置标志,以便调用代码知道一旦显示对话框代码满足该做什么。

    【讨论】:

      猜你喜欢
      • 2017-04-29
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2023-03-09
      • 2017-05-27
      • 2010-12-20
      相关资源
      最近更新 更多