在VB6表单上直接使用Windows Forms控件是否可行?

5

能否在VB6表单中直接使用.NET Windows Forms控件?

目标是在传统的VB6应用程序中使用更新的.NET控件。我们已经拥有了一个混合的.NET / VB6环境。

  • 我知道Microsoft InteropForms Toolkit,但它被描述为从.NET导出自定义用户控件到VB6中使用。这似乎并不适用于预先存在的控件(但我可能错了)。

  • 我试图只简单地将System.Windows.Forms.tlb引用到VB6项目中作为组件库 - 但它不允许选择,这似乎意味着它里面没有ActiveX控件。

我知道你可以轻松地反向操作 - 比如在.NET Winforms表单上使用VB6用户控件。但这不是我需要的。


您可以通过正常方式从VB6引用System.Windows.Forms程序集,并在VBP中得到以下行:

Reference=*\G{215D64D2-031C-33C7-96E3-61794CD1EE61}#2.4#0#C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.tlb#System_Windows_Forms

但是这并不能提供在表单上放置控件的访问权限。

1
将VB6应用程序现代化为VB.NET是否值得这个痛苦? - HardCode
如果代码库很大,那么确实可能会太痛苦了。 - LarsTech
@HardCode 我们正在逐步将一个大型的VB6应用程序现代化为.NET。这可能是一个有用的步骤。 - StayOnTarget
我相信您需要以某种方式对.NET控件进行包装。也许Interop Toolkit不是一个坏选择?每个UserControl只有一个.NET控件? - Brian M Stafford
1个回答

0

我以前做过这个。 我在 .net 中创建了一个控件(使用要使用的表单控件),然后使用 InteropFormsToolkit 将其导出到 tlb,并创建了一个 vb6 控件,在其中放置了该 .net 控件。 需要映射我想要使用的所有属性、事件和方法。 在 vb6 表单中,我添加了这个 vb6 控件,它封装了 .net 控件。 它有效地运行了!


2
谢谢@Jorge,也许那是正确的方法。我希望有一种不用编写包装器就能完成的方法。 - StayOnTarget
或者自动完成也不错。 - tmighty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接