等待显示MDI子窗体-替代DoEvents

问题描述 投票:0回答:1

一位同事对我的应用程序进行了一些改进,但与此同时,他更改了整个应用程序以使用MDI子窗体。因此,在以前我可以使用ShowDialog()使子例程等到新窗体关闭以继续的地方,现在我不能了。我改编了一些旧的VB6代码以尝试复制相同的功能,但是它使用了DoEvents(),并且告诉我要不惜一切代价避免这种情况。

在这一点上,我忍不住觉得我的方法论存在一个基本缺陷,并且可能有一种简单得多的方法来完成相同的任务。

    Private Sub Label_EditNode_Click(sender As Object, e As EventArgs) Handles Label_EditNode.Click
        Dim Frm As New frmVariableEditor With {
            .Tag = "FrmVariableEditor",
            .MdiParent = FrmMDIMain,
            .Dock = DockStyle.Fill,
            .Location = Me.Location,
            .Size = Me.Size,
            .myFieldName = "NodeClick",
            .myResultText = txbNodeClick.Text
        }

        Frm.Show()
        Call WaitOnFormUnload()

        txbNodeClick.Text = Frm.myResultText
    End Sub

    Public Sub WaitOnFormUnload()
        Dim bIsLoaded As Boolean = True
        Dim FormName As String = Me.MdiParent.ActiveMdiChild.Name ' Form.ActiveForm.Name
        Do While bIsLoaded
            bIsLoaded = False

            For Each f As Form In Application.OpenForms
                If f.Name = FormName Then
                    bIsLoaded = True
                    Application.DoEvents()
                    Exit For ' breaks the for loop
                End If
            Next f
        Loop
    End Sub
vb.net showdialog mdichild doevents
1个回答
0
投票

是这样的:

Private Sub Label_EditNode_Click(sender As Object, e As EventArgs) Handles Label_EditNode.Click
    Dim Frm As New frmVariableEditor With {
        .Tag = "FrmVariableEditor",
        .MdiParent = FrmMDIMain,
        .Dock = DockStyle.Fill,
        .Location = Me.Location,
        .Size = Me.Size,
        .myFieldName = "NodeClick",
        .myResultText = txbNodeClick.Text
    }

    AddHandler Frm.FormClosing, AddressOf(RetrieveBlahData))

    Frm.Show()

End Sub

Public Sub RetrieveBlahData(sender as Object, e as FormClosingEventArgs)
   txbNodeClick.Text = DirectCast(sender, frmVariableEditor).myResultText
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.