Pregunta

Usamos DesignSurface y todo lo bueno que es IDesignerHost en nuestro propio diseñador. Las formas diseñadas se conservan en nuestro propio formato a medida y todo funciona de maravilla. También queremos exportar los formularios a un formato basado en texto (lo que hemos hecho, ya que no es tan difícil).

Sin embargo, también queremos importar ese texto de nuevo en un documento para el diseñador, lo que implica volver a colocar el código del diseñador en una CodeCompileUnit. Desafortunadamente, el método Parse no está implementado (sin duda, por buenas razones). ¿Hay alguna alternativa? No queremos utilizar nada que no existiría en una instalación estándar de .NET (como las bibliotecas .NET instaladas con Visual Studio).

Mi idea actual es compilar el texto importado y luego crear una instancia del formulario y copiar sus propiedades y controles en el objeto de la superficie de diseño, y simplemente capturar la nueva CodeCompileUnit, pero esperaba que hubiera una mejor manera. Gracias.


ACTUALIZACIÓN: Pienso que algunos podrían estar interesados ??en nuestro progreso. Hasta ahora, no muy bien. Una breve descripción de lo que descubrí es que el método Parse no se implementó porque se consideró demasiado difícil, existen analizadores de código abierto que hacen el trabajo pero no están completos y, por lo tanto, no se garantiza que funcionen en todos los casos ( NRefactory es uno de los del proyecto SharpDevelop, creo), y la copia de controles a través de una instancia al diseñador aún no funciona. Creo que esto se debe a que, aunque los controles se están agregando a la instancia de formulario que la superficie del diseñador ajusta, la superficie del diseñador no es consciente de su inclusión. Nuestro siguiente intento es imitar cortar / pegar para ver si eso lo resuelve. Obviamente, esta es una gran solución desagradable, pero necesitamos que funcione, así que vamos a tener éxito y estar atentos a las alternativas.

¿Fue útil?

Solución

Siempre puedes escribir tu propio analizador de C #. De esa manera puede estar seguro de que está completo.

En su caso, debido a que no necesita nada como inteligencia, probablemente podría salirse con la suya utilizando un generador de analizador.

Sin embargo, aunque escribieras uno a mano, probablemente no te llevaría más de un mes.

Otros consejos

No es exactamente lo que solicitó, pero podría intentar utilizar la clase CodeDomComponentSerializationService para generar el gráfico CodeDom en función del estado actual de la superficie de diseño.

Usamos esa clase para manejar la funcionalidad de copiar / pegar en nuestro diseñador integrado.

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