将取消返回给发件人VB.NET

将取消返回给发件人VB.NET,vb.net,Vb.net,我在MDI父窗体中有一个自定义选项卡控件。我在标签上有一个关闭按钮。单击“选项卡关闭”按钮时,将删除该选项卡,并删除MDI父窗体的相应MDI子窗体。在MDI子窗体上,我检查其FormClosing事件中的各种条件。如果不满足条件,则通过放置 e.Cancel = True 在FormClosing事件中。但是,当取消表单关闭时,我的选项卡已被删除,并且MDI子表单不再具有相应的选项卡,这一切都可以正常工作。如何将取消从MDI子窗体的FormClosing事件返回到MDI父窗体上选项卡控件按钮的

我在MDI父窗体中有一个自定义选项卡控件。我在标签上有一个关闭按钮。单击“选项卡关闭”按钮时,将删除该选项卡,并删除MDI父窗体的相应MDI子窗体。在MDI子窗体上,我检查其FormClosing事件中的各种条件。如果不满足条件,则通过放置

e.Cancel = True
在FormClosing事件中。但是,当取消表单关闭时,我的选项卡已被删除,并且MDI子表单不再具有相应的选项卡,这一切都可以正常工作。如何将取消从MDI子窗体的FormClosing事件返回到MDI父窗体上选项卡控件按钮的close事件

我应该提到,选项卡控件不是标准的.net选项卡,它构建在标准的.net选项卡控件之上,以允许选项卡上的关闭按钮。我没有为此自定义选项卡控件编写原始代码

下面是自定义选项卡控件“TabControlEx”类中存在的选项卡关闭代码

Public Event CloseButtonClick As CancelEventHandler
Protected Overridable Sub OnCloseButtonClick(ByVal sender As Object, ByVal e As EventArgs)
    If Not DesignMode Then
        Dim btn As Button = DirectCast(sender, Button)
        Dim tp As TabPage = CloseButtonCollection(btn)
        Dim ee As New CancelEventArgs
        RaiseEvent CloseButtonClick(sender, ee)
        If Not ee.Cancel Then
            Me.TabPages.Remove(tp)
            RePositionCloseButtons()
            Me.SelectedIndex = Me.TabCount - 1
        End If
    End If
End Sub
这是我在MDI父窗体的选项卡控件上使用的代码

Private Sub TabControl_CloseButtonClick(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles TabControl.CloseButtonClick

    Dim i As Integer
    If TabControl.TabPages.Count > 0 Then
        For i = 0 To Me.MdiChildren.Length - 1
            If i = TabControl.SelectedIndex Then
                Me.MdiChildren(i).Close()
            End If
        Next
    End If

End Sub
这是MDI子窗体上存在的窗体关闭代码。我已经对它进行了简化,以显示这个场景

Private Sub frmMyMdiChildForm_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing

    If (MsgBox("Do you wan to contiue closing", vbYesNo) = vbNo) Then
        e.Cancel = True
        'This is where I need to send the cancel command back to the sender somehow
        Exit Sub
    End If
End Sub

为什么关闭按钮没有从FormClosing事件进行验证而不是关闭表单。那就什么也关不上,除非你同意。否则,您将不得不在关闭事件中关闭这些选项卡。这将起作用,但调用代码页是母版页,即MDI父级。我会有很多子页面,因此在一个代码页面中有很多验证代码,并且子页面的相关代码不容易找到。为什么不在父页面中创建公共函数,在关闭之前必须进行验证就可以了。所有子页面都可以访问该页面。我担心唯一的其他方法是重建所有的子表单(不确定,我从来没有对表单做过太多),这将需要更长的时间。谢谢你的建议,它给了我一个似乎对我有用的想法。我只是检测子表单是否可见——作为tab close事件的最后一行代码,如果为true,则表单尚未关闭,因此我调用cancel。这将取消选项卡关闭。你的方法也会奏效。谢谢