12

Recientemente he estado realizando algunas mejoras en muchos de los controles que usamos, por ejemplo, dar valores predeterminados de propiedades y hacer que los botones sean privados en lugar de protegidos. Al realizar este tipo de ajustes, debe regenerar los archivos de diseñador de los formularios que tienen este control o los controles que heredan del control.Archivos de diseño de regeneración automática

En el pasado esto no era realmente un problema porque solo teníamos 20-30 formularios. En este momento tenemos más de 300 formularios que significarían abrir la misma cantidad de diseñadores en VS2010.

Así que mi pregunta: ¿conoce una forma de automatizar este proceso para que todos los formularios se regeneren?

He estado pensando en una macro que busca archivos de diseñador y abre el archivo (con un máximo de 25-50 archivos abiertos para asegurar que VS no se bloquee), pero no he podido obtener esto funciona

¡Espero que alguien tenga una sugerencia!

+0

¿Qué tal el buen viejo 'Buscar y reemplazar' (ctrl-F)? –

+0

Eso es cierto, lo hicimos mucho en el pasado. Pero después de 2 años, todos los archivos del diseñador se volvieron ilegibles (una gran cantidad de espacios de más de 20 líneas, propiedades que no están en orden alfabético). Cuando VS regenera el archivo de diseñador, todo está en orden y ordenado. Lo cual es algo necesario cuando tienes tantas formas y haces ajustes todos los días (le estamos dando a la UI completa una gran actualización). – Sander

Respuesta

-3

Emplee la herencia del formulario en lugar de mantener los cambios en más de 300 controles.

+1

-1; No respondió la pregunta. – AMissico

2

También encontré este problema (vea también: Force WinForms to regenerate .designer.cs files).

Al final, la mayoría de las propiedades que eliminé fueron nombradas de manera única, y pude escribir un script de shell para eliminar las líneas de los archivos de diseñador que contenían los nombres de las propiedades.

Nota, esto realmente elimina la línea, no solo dejando una línea en blanco.
Necesita ejecutarse desde un Bash Shell, si tiene msysgit instalado, ese shell está bien.
En este caso, TextForeColor era la propiedad que se está eliminando.

#!/bin/bash 
files=$(find . -type f -name '*.Designer.cs' -print0 | xargs -0 grep -l 'TextForeColor') 
for file in $files 
do 
    echo $file 
    sed '/TextForeColor/ d' $file >$file.tmp 
    mv $file.tmp $file 
done 
+0

Sabes que podrías haber hecho lo mismo con el cuadro de diálogo Buscar y reemplazar en Visual Studio. – AMissico

+0

@AMissico: No que yo sepa, no puede: F & R en VS no admite eliminación de línea, solo eliminación de contenido de línea (específicamente no quería líneas en blanco) y tuve que ejecutar esto en más de 60 directorios fuente de proyectos (no hay una solución única para todos los proyectos). – Pondidum

+0

Elimino varias líneas en blanco, líneas dobles en blanco, líneas en blanco únicas, expresiones regulares que coinciden con ": i \ .TextForColor =", por lo que no cambio accidentalmente otro contenido. Puede hacerlo en diferentes carpetas, incluidas sus subcarpetas, no solo en "solución completa" o un proyecto, e incluso especificar tipos de archivos. La función se llama "Reemplazar en archivos" por una razón. – AMissico

5

La única forma que he encontrado para hacer lo que desea es abrir el diseñador de formularios, agregar un control y luego guardar. Esto regenerará el código del diseñador. A continuación, elimine el control recién agregado, vuelva a guardar y cierre.

Normalmente agrego un botón haciendo doble clic en el botón en la caja de herramientas. Esto pone el botón en la ubicación 0,0.

Lo hice hace un par de meses con un proyecto con aproximadamente 100 formularios y controles de usuario. En lugar de una macro que recursó sobre los archivos del proyecto, grabé una macro temporal, luego ejecuté la macro para cada formulario/control de usuario e inspeccioné los resultados.

No confundas la refacturación con el reformateo. A menudo optimizo y/o modifico el código del diseñador en formas grandes. Por ejemplo, cambiaré los controles de orden que se agregan a los paneles y cómo se agregan los paneles a otros paneles. No regeneraría ciegamente el código de diseñador.

Cuestiones relacionadas