VB6 создал ocx на .NET WinForm?

Я унаследовал проект VB6, в котором есть форма с элементами управления VB (метка и т. Д.) И общие элементы управления Windows (Treeview, ImageList и т. Д.), Который выглядит как идеальный кандидат для управления пользователем.

Я упомянул коллеге о возможности его компиляции в качестве элемента управления ActiveX ocx для использования в проекте .NET WinForms. Они были немного напуганы предыдущим опытом использования VB ocx в проекте C ++: на этапе прототипирования все было хорошо, но при реальном использовании были проблемы с синхронизацией и обновлением (многие элементы управления в диалоговом окне, переход между элементами управления, деактивация и активация диалог и т. д.).

Есть ли у кого-нибудь опыт использования ocx, созданного VB6, в .NET Windows Form? Могу ли я ожидать тонких проблем или они хорошо играют вместе?


person onedaywhen    schedule 04.11.2009    source источник
comment
+1 Интересный вопрос. Будет особенно интересно увидеть ответы, касающиеся реального опыта использования OCX, написанного на VB6 в форме .NET.   -  person MarkJ    schedule 04.11.2009
comment
Интересно, есть ли различия в зависимости от того, какую версию .NET вы используете.   -  person David T. Macknet    schedule 18.11.2010


Ответы (3)


Я бы с радостью перешел с .NET -> VB 6.0, используя Interop Forms Toolkit 2.0 от Microsoft именно для этой цели. Я делал это много раз. Другой путь может быть болезненным.

То, что беспокоит вашего коллегу, вполне реально. Возникает проблема: какой контроль в какое время сосредоточен и как определенные мысли обрабатываются под капотом. Ярким примером этого является переход между элементами управления с помощью табуляции.

Учтите, что у вас есть форма .NET с некоторыми элементами управления .NET и VB 6 Active X. Этот ActiveX также будет содержать элементы управления. Теперь, когда вы переходите через свою .NET-форму, когда вы переходите к ActiveX, вы затем ожидаете перехода на табуляцию по всем элементам управления в ActiveX, но вы этого не делаете! Вы сразу перейдете ко всему элементу ActiveX. Это проблема.

Теперь, если вы идете наоборот, .NET внутри VB 6.0, вы должны учитывать это в коде. В этой статье CodeProject есть отличный класс ActiveXHelpers, который именно это и делает. Но в основном это сводится к ручной обработке события KeyPressed, проверке вкладки или shift + tab и ручной фокусировке следующего / предыдущего элемента управления.

Теперь в вашей ситуации вам нужно изменить код VB 6, чтобы он вел себя так. Скорее всего, потребуется меньше усилий, чтобы переписать элемент управления в .NET. У меня никогда не было проблем с обновлением, но, как я уже сказал, я перешел только на .NET -> VB, а не наоборот. В любом случае, вероятно, возникнет много проблем, и у вас, скорее всего, возникнут другие проблемы, такие как затопление событий и определение разницы между дизайном и средой выполнения в VB.

person ParmesanCodice    schedule 04.11.2009

К сожалению, у меня есть только половина ответа. Мы используем один элемент управления VB6 OCX в форме .NET, и он работает без каких-либо проблем. Он не используется с другими элементами управления .NET или OCX в этой форме. Он обеспечивает специализированное представление базы данных.

person RS Conley    schedule 04.11.2009

В нашем программном пакете есть смесь VB6 и .NET. Мы используем ряд элементов ActiveX, созданных на основе VB6, как в приложениях VB.NET, так и в приложениях C #. По большей части это работает на удивление хорошо.

Самая большая головная боль, которая у нас есть, заключается в том, что при изменении версии элементов управления VB6 нам приходится повторно добавлять ссылки в проекты .NET. Кажется, что библиотеки взаимодействия .NET привязаны к определенной версии элемента управления, и он не может восстановить взаимодействие для новой версии, не удаляя взаимодействия из проекта и не создавая их заново. Немного мучительно, но я нашел способы сделать это, поэтому мне не нужно удалять и воссоздавать все экземпляры элементов управления.

person Corin    schedule 05.11.2009