这涉及一个VB6应用程序,通过互操作显示C#表单。
C#表单中的事件会导致显示其中一个VB6应用程序表单。
通常,当这个VB6表单被隐藏(Form.Hide
)时,底层的C#表单将被带到前面。
但是如果在其生命周期中VB6表单导致显示MsgBox
,那么当VB6表单被隐藏时,底层的C#表单将不在前面。
为什么会这样?这就像MsgBox
正在改变表格的Z顺序。
答案 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
要求您知道窗口标题的文本以获取句柄。