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

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

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

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

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, проверке закладки или сдвига +, а также фокусировке следующего/предыдущего управления вручную.

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


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


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

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

licensed under cc by-sa 3.0 with attribution.