Vb.net 如何从.NET Interop ed UserControl关闭VB6父窗体?

Vb.net 如何从.NET Interop ed UserControl关闭VB6父窗体?,vb.net,vb6,com-interop,Vb.net,Vb6,Com Interop,我正在为已经部署的VB6可执行文件构建某种“插件”。我正在使用.NET和COM互操作。VB6创建一个空白表单,然后将my.NET UserControl加载到该表单中(不过,到目前为止,.dll已编译成VB6可以看到的.ocx ActiveX UserControl) 我已经让它运行良好,但我希望能够从.NET代码内部关闭VB6父窗体。我能够将VB6代码添加到我的VB6 Ified UserControl中,但是我似乎找不到当UserControl被销毁时触发的事件 到目前为止,我所尝试的:

我正在为已经部署的VB6可执行文件构建某种“插件”。我正在使用.NET和COM互操作。VB6创建一个空白表单,然后将my.NET UserControl加载到该表单中(不过,到目前为止,.dll已编译成VB6可以看到的.ocx ActiveX UserControl)

我已经让它运行良好,但我希望能够从.NET代码内部关闭VB6父窗体。我能够将VB6代码添加到我的VB6 Ified UserControl中,但是我似乎找不到当UserControl被销毁时触发的事件

到目前为止,我所尝试的:

  • 从my.NET控件的Disposing事件调用父窗体.Close。接收错误
    对象引用未设置为对象实例。
  • 尝试从VB6关闭(我可以从那里获得父窗体的句柄)。使用
    ControlRemoved
    Terminated
    ,以及其他一些在retrospect中毫无意义的黑客解决方法,都不会触发
  • 调用
    Application.Exit
    (此时真的很绝望)关闭整个应用程序(谁会砰的一声…)
我查看了放在.NET控件中的VB6互操作代码,以下代码看起来确实很有希望:

#Region "VB6 Events"

'This section shows some examples of exposing a UserControl's events to VB6.  Typically, you just
'1) Declare the event as you want it to be shown in VB6
'2) Raise the event in the appropriate UserControl event.

Public Shadows Event Click() 'Event must be marked as Shadows since .NET UserControls have the same name.
Public Event DblClick()

Private Sub InteropUserControl_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
    RaiseEvent Click()
End Sub

Private Sub InteropUserControl_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DoubleClick
    RaiseEvent DblClick()
End Sub

#End Region

是否只是在本节中添加一个事件?我对Interop或VB6不太熟悉。

好吧,我想好了,我会把我为后代所做的事情发布出来:p

我在VB6代码中使用的事件处理程序是正确的,MarkJ也是正确的

我在.NET代码中创建了一个事件

Public Event KillApp()

然后,当我想关闭所有东西时,提出:

RaiseEvent KillApp()

在VB6 UserControl代码中,我再次声明了事件

Public Event KillApp()

然后为它添加了一个处理程序:

Private Sub MenuCtl_KillApp()
    Unload Me.ParentForm
End Sub
其中,
MenuCtl
是.NET控件的我的实例,
Me.ParentForm
是包含该控件的VB6容器窗体。它现在正确地关闭表单


回想起来,这很有道理,但我不知道您可以如此轻松地在托管/非托管之间来回传递事件。

我认为您应该从.Net控件引发一个事件,但我也不太熟悉interop,因此我不太确定您是如何做到的。