我会尽力解释这一点,我可以。行事意外
我有Windows窗体应用程序,其中包含众多的形式。打开的第一个表格 是一种非模态形式,充当命令形式来发布各种格式的 底层预留程序。第二种形式也打开这基本上是我的 主要形式的应用程序。该表单包含多个复选框,以运行修改预订程序的方法 。这种形式也是无模式的。 被选中的每个框同时运行,并执行删除,更改和添加到下面的 res程序的方法。可以在任何给定时间检查各种盒子。下面是代码 处理复选框:
Private Sub frmOWTMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp
If e.KeyCode = Keys.Enter Then
Me.Hide() 'here i want to hide the OWTMain form
Call ckforPNR()
If Me.cbPricing.Checked Then
Call doPricing()
Me.cbPricing.Checked = false
End If
If Me.cbUdids.Checked Then
frmUdids.Show()
Me.cbUdids.Checked = False
End If
If Me.cbMod.Checked Then
Call doModUdids()
End If
If Me.cbFare.Checked Then
Call doFareSavings()
Me.cbFare.Checked = False
End If
End If
Me.show() 'This is the problem. This runs during method calls. All I'm
'looking to do is re display the OWTMain form.
End Sub
在这一点上,我想再次显示上述OWTMain形式。这是我遇到问题时的 。如您所见,许多方法被称为 ,其中涉及向用户显示其他表单。我不希望这些 表单中的任何一个是模态的,因为我希望原始的第一个打开的表单仍然是 能够向res程序发出命令以查看其他表单所需的信息。
这里是调用的一些方法的例子:
Private Sub doPricing()
Dim myPrice As New Pricing 'a call to another class that handles pricing
If myPrice.getTQT = False Then
frmAddPricing.ShowDialog() 'showing new forms
Else
frmCurPricing.ShowDialog()
End If
End Sub
Private Sub doFareSavings()
Dim myPrice As New Pricing
If myPrice.checkForFS = False Then
frmFS.ShowDialog() 'showing new forms
End If
If myPrice.checkForFS = True Then
frmFSVerify.ShowDialog()
End If
End Sub
当我打电话任何这些方法的形式OWTMain显示过早而从被调用的方法等 形式仍在运行。我预计顶部的代码按照调用顺序运行 ,但事实并非如此。我只想在所有代码运行后重新显示OWTMain 表单。如果没有 创建大量代码来缩小窗口的打开和关闭,我一直无法解决这个问题。
任何帮助,这将不胜感激。谢谢。 John
在我看来,你应该从该事件处理程序中删除该代码的绝大部分。无模式地显示第一个表单,即通过调用Show来处理它的FormClosed事件。在该事件处理程序中,决定下一步该做什么。为每个其他形式做这件事。在最后一个提出了FormClosed事件后,再次显示原始表单。 – jmcilhinney 2014-10-01 06:20:33
如果你看看第一个块:'如果chkbox检查//执行某些操作//取消选中它' - 这就是按钮的工作原理。因为它不适合于[SRP](http://en.wikipedia.org/wiki/Single_responsibility_principle) – Plutonix 2014-10-01 11:27:38