Pregunta

He heredado un proyecto de VB6 que tiene un formulario con controles de VB (etiqueta, etc.) y los controles comunes de Windows (Vista de árbol, ImageList, etc), que se parece a un candidato ideal para un control de usuario.

he mencionado a un colega la posibilidad de elaboración del mismo como un control ActiveX OCX para ser utilizado en un proyecto .NET WinForms. Ellos fueron ligeramente horrorizado debido a la experiencia previa en el uso de un OCX de VB en un proyecto de C ++: todo estaba bien durante la fase de creación de prototipos, pero no fueron sincronización y refrescar problemas cuando se utiliza para reales (muchos controles de un diálogo, tabulación entre los controles, desactivando a continuación, activando el cuadro de diálogo, etc.).

¿Alguien tiene alguna experiencia de usar un VB6 OCX escrito en un formulario Windows .NET? ¿Puedo esperar que los problemas sutiles o hacer que juegan bien juntos?

¿Fue útil?

Solución

Me felizmente iría desde .NET -> VB 6.0 utilizando la Formas de interoperabilidad Toolkit 2.0 de Microsoft precisamente para este propósito. He hecho esto muchas veces. En sentido contrario podría ser doloroso.

Lo que su colega está preocupado es muy real. El problema es que viene en el que el control se centra en que el tiempo y cómo ciertos piensa obtener manejada bajo el capó. Un buen ejemplo de esto es la tabulación a través de los controles.

Tenga en cuenta que usted tiene una forma .NET con algunos controles .NET y Active X. Esta VB 6 ActiveX también tendría controles en ella. Ahora, como usted pestaña a través de su formulario de .NET, cuando se llega a la ActiveX usted entonces esperar a la pestaña a través de todos los controles en ActiveX, pero que no lo hacen! Se quiere pestaña sobre todo el control ActiveX a la vez. Este es un problema.

Ahora bien, si usted va a la inversa, .NET dentro de VB 6.0, hay que atender a la conducta presente en el código. Este CodeProject artículo , tiene una excelente clase llamada ActiveXHelpers que hace precisamente eso. Pero básicamente se trata de manejar manualmente el evento KeyPressed, la comprobación de una lengüeta o shift + tab, y el enfoque al siguiente control / anterior manualmente.

Ahora en su situación que había necesidad de modificar el código de VB 6 a comportarse de esta manera. Es lo más probable sea menos esfuerzo para reescribir el control en .NET. Nunca he experimentado problemas y refrescantes, pero como he dicho sólo he ido NET -> VB no al revés. De cualquier manera no es probable que sea mucho dolor involucrado y lo más probable es que tenga otros problemas, tales como el hundimiento eventos y para distinguir la diferencia entre el diseño y el tiempo de ejecución en VB.

Otros consejos

Por desgracia, sólo tengo una respuesta a medias. Utilizamos un único control OCX VB6 en un formulario de .NET y funciona sin ningún problema. No se utiliza con cualquier otro control .NET o OCX en ese formulario. Proporciona una visión especializada en una base de datos.

En nuestro paquete de software que tienen bastante la mezcla de VB6 y .NET. Utilizamos una serie de VB6 autor de controles ActiveX en aplicaciones VB.NET y C #. En su mayor parte, funciona sorprendentemente bien.

El mayor dolor de cabeza que tenemos es que cuando la versión de los controles de VB6 cambiar, tenemos que volver a añadir las referencias en los proyectos de .NET. Parece bibliotecas .NET de interoperabilidad están atados a una versión específica del control y no se puede regenerar la interoperabilidad para una nueva versión sin quitar los Interops del proyecto y volver a crearlos. Un poco de dolor, pero he encontrado maneras de hacerlo, por lo que no tiene que quitar y volver a crear todas las instancias de los controles.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top