我目前正在探索使用 C# 将一些较旧的 VB6 应用程序移植到 WPF 的选项。第一阶段的计划是移植几个关键表格而不是所有应用程序。理论上的目标是通过 ActiveX dll 在 WPF 内的某种容器中打开 VB6 表单。
这有可能吗?
我试过查看互操作,但似乎找不到一个可靠的例子来说明如何让它与 Win32 控件以外的任何东西一起工作,而不是一个完整的形式。我可以完全访问旧的 VB6 代码,并且可以根据需要对其进行修改。
主 WPF 应用程序的以下屏幕截图将用作包装器/容器:
http://www.evocommand.com/junk_delete_me/main_menu_mockup.png
当前 VB6 维护屏幕将加载到前一个屏幕右侧的“空白”部分。
最佳答案
我能够通过以下步骤完成任务:
表格中的标题
以前的方式。你可以解决
它带有备用控件
(标签/无边框文本框等)
完成相同的功能,如果
需要。这不是优先事项,因为
每个屏幕都被托管在一个
浏览器就像我们新的标签系统
.Net 项目。
从 Me.Mousepointer 更改为
Screen.mousepointer
隐藏 .Net 的备用事件
容器。
我.[任何东西] 必须被移除或
替换为 UserControl.[anything]
如果它们适用。
引用一个
[yourcontrol].Contianer.Property 上
他们将需要更改为的形式
通过 UserControl.Controls 循环
取而代之的是集合,而“容器”是
对 vb6 ActiveX 控件无效
必须从项目中删除
现在没有 Hwnd 在 WPF 中处理。
您收到“非模态表单”的错误消息
无法在此主机中显示
来自 ActiveX DLL 的应用程序,
ActiveX 控件或属性页”。
在我们的例子中,我们有一个简单的飞溅
确定时会显示的屏幕
显示的长流程/报告
让用户知道正在运行什么。
关于c# - 您可以/如何在 C# WPF 应用程序中托管完整的 VB6 表单?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2239845/