代码之家  ›  专栏  ›  技术社区  ›  onedaywhen

VB6在.NET WinForm上编写了OCX?

  •  5
  • onedaywhen  · 技术社区  · 16 年前

    我继承了一个vb6项目,它有一个带有vb控件(标签等)和Windows公共控件(TreeView、ImageList等)的窗体,看起来像是用户控件的理想候选者。

    我向一位同事提到了将其编译为在.NET WinForms项目中使用的OCX ActiveX控件的可能性。由于以前在C++项目中使用VB OCX的经验,他们有点惊骇:在原型阶段,一切都很好,但是当用于真实(在对话框上的许多控件、控件之间的制表、停用然后激活对话等)时,会出现定时和刷新问题。

    有没有人有在.NET Windows窗体上使用VB6编写的OCX的经验?我能预料到细微的问题吗?还是它们在一起很好?

    3 回复  |  直到 16 年前
        1
  •  2
  •   ParmesanCodice    16 年前

    我很乐意使用.NET->vb 6.0 Interop Forms Toolkit 2.0 正是为了这个目的。我已经做过很多次了。走另一条路可能会很痛苦。

    你的同事所关心的是非常真实的。出现的问题是,在什么时间集中控制,以及某些想法如何在幕后得到处理。一个主要的例子是在控件之间切换。

    假设您有一个.NET窗体,其中包含一些.NET控件和一个VB 6 Active X。此ActiveX中也包含控件。现在,当您在.NET窗体中切换时,当您到达ActiveX时,您将 期待 在所有控件之间切换 在里面 ActiveX,但你没有!您将同时对整个ActiveX控件进行制表。这是个问题。

    现在,如果您要在VB 6.0中绕过.NET,则必须在代码中处理这种行为。这个 CodeProject article 有一个很好的课程叫做ActiveXhelpers,就是这样做的。但基本上,它归结为手动处理按键事件,检查选项卡或shift+tab,以及手动对焦下一个/上一个控件。

    现在,在您的情况下,您需要修改vb 6代码,使其行为像这样。在.NET中重写控件的工作量很可能会减少。我从来没有遇到过令人耳目一新的问题,但正如我所说,我只使用了.NET->VB,而不是相反的方式。不管是哪种方式,都可能会带来很多痛苦,而且您很可能会遇到其他问题,比如下沉事件以及在VB中说明设计和运行时之间的区别。

        2
  •  1
  •   RS Conley    16 年前

    不幸的是,我只有半个答案。我们在.NET窗体上使用一个单独的vb6 ocx控件,它工作时不会出现任何问题。它不与该窗体上的任何其他.NET或OCX控件一起使用。它为数据库提供专门的视图。

        3
  •  1
  •   Corin    16 年前

    在我们的软件套件中,我们混合了vb6和.NET。我们在vb.net和c应用程序中使用了许多由vb6编写的ActiveX控件。在大多数情况下,它的效果令人惊讶。

    我们最大的头疼是,当vb6控件的版本更改时,我们必须在.NET项目中重新添加引用。.NET互操作库似乎绑定到控件的特定版本,如果不从项目中删除互操作并重新创建它们,则无法为新版本重新生成互操作。有点疼,但我已经找到了方法,所以我不必删除和重新创建控件的所有实例。

    推荐文章