【问题标题】:Opening a VB6 form from WPF application从 WPF 应用程序打开 VB6 表单
【发布时间】:2009-03-16 07:13:11
【问题描述】:

我们目前正致力于将旧的 VB6 应用程序移植到 WPF。第一阶段的计划是移植几个关键表单,而不是所有应用程序。有人提出,我们可能会尝试从 WPF 应用程序中打开一些旧的 VB6 表单(作为模式表单),从而提供比第一阶段更强大的功能。

我想问你们朋友们,首先,这种可憎的事情:) 可能吗?可以从 WPF 应用程序打开 VB6 表单吗?

谢谢, 沙哈夫。

【问题讨论】:

    标签: wpf vb6


    【解决方案1】:

    您需要做的是将表单打包到 ActiveX DLL 中,并公开可以设置初始值、显示表单并返回它们修改的任何值的类。

    例如,在我自己的 CAD/CAM 应用程序中,我们有表单,然后是一个不包含修改模型的命令对象(实现命令设计模式的类)的层,以及全部用 VB6 编写的模型。

    一些命令调用 VB6 窗体的对话框。有些很简单,有些很复杂。我们转换项目的第一阶段是撕掉顶层表单层并将其替换为 .NET 等效项。新的 .NET 表单引用了包含命令对象的活动 DLL。

    效果很好。 .NET 外观与 VB6 表单外观之间存在一些视觉差异,但除了命令对话框的运行方式与在 VB6 可执行文件下的运行方式相同。

    需要注意的一点是,如果您在此过程中继续修改原始 ActiveX DLL,那么构建 .NET 程序会变得有点痛苦。与 VB6 不同,.NET 在更新对引用的 ActiveX 库的较新版本的引用时并不那么自动。解决方案很简单,删除原始引用,然后添加新引用。

    【讨论】:

    • 您的 .NET 表单是 WPF 还是 WinForms?
    【解决方案2】:

    是的,这是可能的;取决于你愿意工作的努力程度。支持的关键场景如下(注意:还有其他支持的场景,但这些是关键):

    1. WPF -> WinForms
    2. WinForms -> WPF

    鉴于在 VB6 中您的对象都是 COM 对象,您可以通过 WinForms 在 WPF 中托管它们。这是 MSDN 上我建议您开始的位置:

    还有几本关于 WPF 的非常好的书籍涵盖了与 WPF 的互操作(两个方向),按关于这个主题的优先顺序排列:

    • WPF 释放(亚当·内森)
    • 编写 WPF(Chris Sells 和 Ian Griffiths)

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-06
      • 2013-05-10
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多