VB.NET ShowDialog表单没有结束

时间:2010-11-04 18:23:30

标签: vb.net forms showdialog

我从VB6转换了这个应用程序。我有两种形式。 Form1通过菜单项实例化Form2。 单击关闭(X)时,我无法让Form2结束。如果Form2'闲置',它就会关闭;但如果我在一个循环中处理所有事件的任何事件,但它继续在Form2中处理。我已经尝试过使用Dispose,Close,Application.Exit,Application.ExitThread。我的最后一次尝试是创建自己的事件来重新启动Form1并处理Form2 - 然后命中它但Form2仍在运行。这笔交易是什么?顺便说一句,如果我只使用Show vs ShowDialog - Form2只是闪烁并消失。

Form1 does this
Dim f2 as Import
:
        Hide()
        f2 = New Import
        AddHandler f2.die, AddressOf killf2
        f2.ShowDialog(Me)
        Show()

Private Sub killf2()
        f2.Dispose()
        f2 = Nothing
End Sub

Form2

Public Event die()
Private Shadows Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        Dispose()
        Close()
        e.Cancel = False
        RaiseEvent die()
End Sub

2 个答案:

答案 0 :(得分:0)

我认为你的活动已经过去了。你想要包含form2实例的form1来监听form2的form_closing事件。然后你可以设置f2 = nothing。

Form1应完全包含form2。

这是一个例子:

Public Class MDIMain
    Private WithEvents _child As frmViewChild

    Friend Sub viewChildShow()
        _child = New frmViewChild
        _child.MdiParent = Me
        _child.WindowState = FormWindowState.Maximized
        _child.Show()
    End Sub

    Private Sub _child_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles _child.FormClosing
        _child = Nothing
    End Sub

不要向form2添加任何内容,请尝试

Dim f2 as Import
        Hide()
        f2 = New Import
        f2.ShowDialog(Me)
        Show()

Private Sub f2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles f2.FormClosing
        set f2 = nothing
End Sub

重新:你的评论 它返回到form2并继续处理click事件处理程序中的下一个语句

这是一个功能,它会导致此行为。你需要确保me.close或close我是form2中的最后一个语句,没有别的东西可以执行。

答案 1 :(得分:0)

你说的这个循环是什么?用户界面(窗口)与正在运行的任何代码分开。在您的类派生形式表单中,允许代码在创建表单之前和表单被销毁之后运行。如果代码尝试访问用户界面对象,则可能会发生异常,但是如果没有用户界面,则无法阻止代码运行。

如果您希望“for”循环退出,则必须以某种方式向其发送信号,例如通过创建一个布尔“退出”成员变量。表单关闭时设置“quit = True”,然后让“for”循环检查它是否为真。