2009-02-23 13 views
9

Creé una aplicación bastante elegante para mi empresa. Tuvimos un diseñador gráfico para crear la GUI, que fue un dolor para implementar, todos los botones gráficos, muchos fondos en capas y logotipos, animaciones, etc.Plantilla gráficamente una aplicación .NET winforms

Pero ahora mi empresa quiere revenderlo bajo diferentes marcas. Pero como yo mayormente lo codifiqué bien, le dije a mis superiores que podría tener una versión totalmente modificada en menos de una semana. Básicamente, todo lo que haría sería cambiar un conjunto de configuraciones en un archivo de configuración xml, intercambiar los gráficos con un nuevo conjunto y compilar.

El problema es que si quieren 5 o 6 marcas diferentes, tendría 5 diferentes construye para soportar (que realmente debería apoyar 1, con plantillas diff)

El problema es que no es fácil (en lo Lo sé) para cambiar las imágenes en una aplicación de winforms. Tengo todos los recursos gráficos en una única carpeta, pero una vez que cada archivo se ingresa en su respectiva lista de imágenes o contenedor en Visual Studio, la única forma de conseguir que se actualice es eliminarlo y volver a agregarlo, cambiando la carpeta de origen no causa que la imagen incrustada se actualice. Esto sería increíblemente tedioso para cada construcción, tiene que haber una manera más fácil.

Add On:
Así que después de algunas investigaciones más lejos, me estoy inclinando torwards algún tipo de editor de resx. Sin embargo, los que he visto hasta ahora están más enfocados en traducir cadenas a varios idiomas, y son muy débiles o no pueden editar recursos binarios como bitmaps/png's. Aunque si abre un archivo resx en un visor xml (uso el bloc de notas 2 con .resx configurado para usar resaltado de símiles xml), MS tiene la amabilidad de decirle exactamente cómo se compila cada tipo (principalmente variaciones de la base 64)

+2

lástima que esté haciendo winforms, esto sería pastel en WPF. –

+0

La aplicación se inició hace poco más de un año, utilizando una gran cantidad de código importado de una versión que hicimos hace casi 4 años. Lamentablemente, esta vez no nos veo cambiando a WPF. –

Respuesta

12

Creo que su objetivo debe ser tener archivos de recursos "brandable"; básicamente está localizando su aplicación, excepto que solo tiene algunas versiones diferentes de inglés.

Puede usar ResGen.exe y ResourceManager para cargar un archivo de recursos externo, por lo que podría usar 5 archivos de "recursos" diferentes pero mantener la misma base de código.

Este artículo también puede ayudar ... http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/b388c700-0e07-452b-a19e-ce02775f78a6/

Editar: Por cierto, voy a segundo el comentario de que si vas a través de una gran cantidad de esfuerzo en esto, considere WPF ... más de esos elementos "gráficos" posiblemente se podría hacer de forma nativa, especialmente si se trata de degradados y otras cosas, sin mencionar las plantillas fáciles.

+0

WPF, no estoy seguro de que esto sea lo que estoy buscando, ¿no tendría que agregar cada imagen individualmente al archivo de recursos alternativo? Estoy buscando que los gráficos modifiquen todas las imágenes en una carpeta, luego cambien esa carpeta por la que tengo antes de compilar. –

-2

Creo que debería pensar en crear controles de usuario para las áreas dinámicamente reemplazables del formulario. En tiempo de ejecución, puede cambiar una ensambladura por otra.

+0

Eso es una idea horrible. TODO es gráfico. Y quiero mantener el código en un lugar singel. Crear ensamblajes nuevos para cada construcción me pondría peor de lo que estoy ahora. –

+0

Pensé que querías decir una imagen de encabezado. Sugiero que cree un control de usuario separado, con imágenes como recursos integrados, y luego cargue dinámicamente el control apropiado en tiempo de ejecución. Cada marca tendría su propio ensamblaje de encabezado. Si tiene imágenes maltratadas, este no es el camino a seguir. –

0

Lo que haría es cargar todos los gráficos del disco al inicio desde una carpeta y crear las listas de imágenes necesarias según corresponda, en lugar de hacer esto en el diseñador. Si le preocupa que alguien robe los gráficos, entonces crearía un formato de archivo simple (posiblemente encriptado) para mis gráficos y una pequeña aplicación simple para usted o el diseñador para convertir a este formato de los archivos normales. Entonces solo se trata de cambiar esta carpeta entre diferentes marcas.

0

Si la mayoría de sus formularios son similares (es decir, el mismo logotipo, los mismos botones en la parte inferior, etc.) puede usar visual inheritance en WinForms para definir un conjunto de "Formularios básicos" heredados de sus formularios.

Si desarrolla un conjunto de "Formularios base" para cada una de sus marcas, cada conjunto en un ensamblaje por separado puede conectar el trabajo necesario para generar una nueva marca se reduce para generar un nuevo conjunto de formularios base.

creo que sirve

0

Es demasiado tarde ahora, pero WPF habría sido una mejor opción que WinForms, ya que es más fácil de la piel.

Sin embargo, eche un vistazo a lo que DevExpress hace para WinForms, ya que sus controles tienen un sistema de skinning. No es demasiado difícil intercambiar un control de forma de win de DevExpress por un control de winform estándar.

Cuestiones relacionadas