在.Net MDI中包含VB6窗体

在.Net MDI中包含VB6窗体,.net,vb.net,winforms,vb6,mdi,.net,Vb.net,Winforms,Vb6,Mdi,我正在将一个旧的VB6应用程序移植到.Net中,但一个VB6表单太大,无法在此版本中迁移 我Shell Vb6 exe以显示.Net中的Vb6表单,但.Net MDI中不包含Vb6表单。我有一种直觉,认为在.NET MDI中嵌入VB6表单是不可能的,有人知道这是否可能吗 我想要的是类似API的东西,甚至是API。对不起,我发布得太快了。以下是解决方案: 这确实是可能的。这既不简单,也不是一个特别好的主意 您需要为表单创建一个ActiveX容器,然后将VB6表单嵌入其中。有关详细信息,请参阅这篇关

我正在将一个旧的VB6应用程序移植到.Net中,但一个VB6表单太大,无法在此版本中迁移

我Shell Vb6 exe以显示.Net中的Vb6表单,但.Net MDI中不包含Vb6表单。我有一种直觉,认为在.NET MDI中嵌入VB6表单是不可能的,有人知道这是否可能吗


我想要的是类似API的东西,甚至是API。对不起,我发布得太快了。以下是解决方案:


这确实是可能的。这既不简单,也不是一个特别好的主意

您需要为表单创建一个ActiveX容器,然后将VB6表单嵌入其中。有关详细信息,请参阅这篇关于CodeProject的文章:


另一种可能的方法(也是非常简单的方法)是将VB6窗体的父级设置为.NETMDI容器。我不确定这是否有效(我从未尝试过),但值得一试。您需要P/调用来获取VB6窗体窗口的句柄,以及更改其父窗口。

我同意Cody的看法,这不是一个好主意。我将继续炮击VB6 exe-这样企业知道我们还有更多的工作要做!顺便说一句,最后一个想法是我们之前所做的。。。。SetParent(childForm.Handle,_parentHandle)SendMessage(_parentHandle,WM_UPDATEUISTATE,ui_INITIALIZE,IntPtr.Zero)UpdateWindow(_parentHandle)@Jeremy:那么第二个想法真的有效吗?在我看来,这是应该的,但我自己没有试过,我不能确定。我认为这比第一个选项简单得多,因为最终的目标应该是一个完整的迁移,所以在intermedia互操作上花费这么多时间似乎没有什么意义。(有时你在这里得到答案的速度真是太快了,不是吗?)