Что вам нужно сделать, это упаковать формы в DLL ActiveX и предоставить классы, которые могут устанавливать начальные значения, вызывать формы и возвращать любые значения, которые они изменяют.
Например, в моих собственных приложениях CAD / CAM у нас есть формы, затем слой, который не содержит ничего из командных объектов (классов, реализующих шаблон проектирования команд), которые модифицируют модель, и все модели, написанные на VB6.
Некоторые из команд вызывают диалоги, которые являются формами VB6. Некоторые из них простые, а другие сложные. Первым этапом нашего конверсионного проекта было удаление верхнего слоя формы и его замена на эквивалент .NET. Новые формы .NET ссылаются на активные библиотеки DLL, содержащие объект Command.
Работало нормально. Существовали некоторые визуальные различия между внешним видом .NET и внешним видом формы VB6, но кроме диалоговых окон команд работали так же, как в исполняемом файле VB6.
Одно предостережение: если вы продолжаете изменять исходные DLL-библиотеки ActiveX во время этого процесса, сборка программы .NET становится немного труднее. В отличие от VB6, .NET не так автоматичен, когда дело доходит до обновленных ссылок на более новые версии библиотеки ActiveX, на которую ссылаются. Решение простое: вы отбрасываете исходную ссылку, а затем добавляете новую ссылку.