我正在尝试为我的项目获取符合我需求的表单配置here并且没有找到解决方案。似乎我找到了一个解决方案,现在我必须在应用程序范围内实现它。
这里我有主要表格和一些子表格(有很多子表格),通过主表格我应该始终能够关闭所有打开的表格,注意通用按键,永久关闭应用程序并观察重要事件。
我在这个事实中找到了解决方案:
_FormClosing
处理程序中我再次启用它。那样非模态形式就像模态形式一样,以便调用者,但不是为了保持始终响应的主要形式!在必须阻止自己的调用者(所有者)的表单中,我添加了属性“阻止”,以便我的代码如下所示:
If Not formIsOpened(frm_myFirstChild) Then
Dim f As New frm_myFirstChild
f.Blocking = True
f.Show(Me)
f = Nothing
End If
在frm_myFirstChild我有财产:
<Browsable(True), _
DefaultValue(False)> _
Public Property Blocking() As Boolean
Get
Return _Blocking
End Get
Set(ByVal value As Boolean)
_Blocking = value
End Set
End Property
如果布尔属性“阻止”为TRUE,则在_Load
下必须执行此代码:
If Blocking And Me.Owner IsNot Nothing Then
Me.Owner.Enabled = False
End If
在_FormClosing
中:
If Blocking And Me.Owner IsNot Nothing Then
Me.Owner.Enabled = True
Me.Owner.Activate()
End If
所有这些都按预期工作,所以我尝试为所有表单实现它,并在子类“cls_transform”中需要时使用:
Protected Overrides Sub OnFormClosing(ByVal e As System.Windows.Forms.FormClosingEventArgs)
If Blocking And Me.Owner IsNot Nothing Then
Me.Owner.Enabled = True
Me.Owner.Activate()
End If
MyBase.OnFormClosing(e)
End Sub
Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
If Blocking And Me.Owner IsNot Nothing Then
Me.Owner.Enabled = False
End If
MyBase.OnLoad(e)
End Sub
这里我有一个问题,即子类不理解属性Blocked
(未声明)。
如何将Form的属性Blocked
添加到子类中,以便我可以将这些子类用于所有表单,并从外部切换属性Blocking
以了解功能需求?
答案 0 :(得分:1)
听起来“cls_transform”实际上是一个派生自Form的类,这是OnFormClosing可以工作的唯一方式。哪个没关系,你的“子表单”现在需要从cls_transform而不是Form派生。选择一个更好的名字。
然后只需将Cling属性添加到该cls_transform类即可解决您的问题。
请注意您的OnFormClosing方法中存在错误。它可以被取消,这将使表单在其所有者处于错误状态时打开。你需要这样写:
Protected Overrides Sub OnFormClosing(ByVal e As System.Windows.Forms.FormClosingEventArgs)
MyBase.OnFormClosing(e)
If Not e.Cancel And Blocking And Me.Owner IsNot Nothing Then
Me.Owner.Enabled = True
Me.Owner.Activate()
End If
End Sub