我从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
答案 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”循环检查它是否为真。