既に展開されている VB6 実行可能ファイルの一種の「プラグイン」を構築しています。COM-Interop と共に .NET を使用しています。VB6 は空白のフォームを作成し、そこに .NET UserControl をロードします (ただし、.dll は VB6 で表示できる .ocx ActiveX UserControl にコンパイルされています)。
うまく機能していますが、.NET コード内から VB6 親フォームを閉じられるようにしたいと考えています。VB6 化された UserControl に VB6 コードを追加することはできますが、UserControl が破棄されたときに発生するイベントが見つからないようです。
私がこれまでに試したこと:
ParentForm.Close
.NET コントロールの Disposing イベントからの呼び出し。受信エラーObject Reference not set to Instance of an Object.
- VB6 から閉じようとしています (そこから親フォームのハンドルを取得できます)。
ControlRemoved
、 、および振り返ってみるとまったく意味のない他のいくつかのハック的な回避策を使用しTerminated
ても、トリガーされません。 - 呼び出す
Application.Exit
と(この時点で本当に必死になっています)、アプリケーション全体が閉じます(誰がサンクするでしょうか...)
.NET コントロールに配置した VB6 Interop コードを調べたところ、次のように有望に見えます。
#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 についてあまり詳しくありません。