底层表格消失但仅在显示对话框时

时间:2012-09-22 14:05:00

标签: c# winforms vb6 com-interop z-order

这涉及一个VB6应用程序,通过互操作显示C#表单。

C#表单中的事件会导致显示其中一个VB6应用程序表单。

通常,当这个VB6表单被隐藏(Form.Hide)时,底层的C#表单将被带到前面。

但是如果在其生命周期中VB6表单导致显示MsgBox,那么当VB6表单被隐藏时,底层的C#表单将不在前面。

为什么会这样?这就像MsgBox正在改变表格的Z顺序。

1 个答案:

答案 0 :(得分:1)

我按照此帖子中的最后一个答案,使用NativeWindow类开始工作:http://social.msdn.microsoft.com/Forums/en-US/2692df26-317c-4415-816b-d08fe6854df8/vbnet-vb6-win32-api-problems?forum=vbinterop

该代码使用FindWindowEx来获取VB6窗口的句柄,这是不必要的,因为您只需将VB6窗口的句柄传递给.NET窗体:

public void ShowDotNetForm(IntPtr hwndMain) 
{
    NativeWindow vb6Window = new NativeWindow();
    vb6Window.AssignHandle(hwndMain);
    f.Show(vb6Window);
}

VB6表单中的代码是:

dotNetObj.ShowDotNetForm Me.hWnd

VB6传递窗口句柄更好,因为FindWindowEx要求您知道窗口标题的文本以获取句柄。