8

Implementamos nuevos estándares de codificación, que requieren que nuestros miembros privados tengan un guion bajo. De este modo:¿Se puede cambiar la generación de código de diseñador VS Win Forms?

private System.Windows.Forms.Label _label; 

Desafortunadamente VS se apagó el defecto más adelante cuando se arrastra un nuevo sello en su formulario:

private System.Windows.Forms.Label label1; 

¿Hay una manera de cambiar el valor predeterminado a:

private System.Windows.Forms.Label _label1; 

Esto pertenece a todos los controles, no solo a las etiquetas, y sí deben usarse desde el código.

Saludos,

Plamen

+6

Seguramente va a cambiar el nombre del valor predeterminado de todos modos ... – Paddy

+0

Sí, pero la forma en que lo tenemos, se supone que es _labelContactName, por lo que tenemos que agregar al final del nombre. Ir al comienzo para agregar el guión bajo, aunque no es un gran problema, parece ser un desperdicio. Además, las personas no lo hacen de manera consistente, y creo que mejoraría si el valor predeterminado tuviera un guión bajo. –

+0

La etiqueta tendrá acceso desde el código. Supongo que en este punto, estoy defendiendo la pregunta sobre bases de consistencia mejorada solamente :). –

Respuesta

3

Además de crear su propio complemento VS que busca el código generado y lo renombra automáticamente, no hay forma de lograr lo que desea.

1

Esta respuesta puede ser satisfactorio, pero es lo mejor que puedo ofrecer.

No creo que pueda obtener Visual Studio Designer para agregar automáticamente el guión bajo. Sin embargo, lo que puede hacer es hacer que el proceso de agregar el guión bajo sea menos doloroso. Simplemente crea tus objetos sin el guión bajo primero; luego, use la función Refactorizar para cambiarles el nombre. Simplemente coloque el cursor sobre el nombre del campo (label1, en su caso) y presione F2 (o haga clic con el botón derecho en ⇒ Refactorizar ⇒ Cambiar nombre). Esto funciona sin importar en qué parte del código se encuentre, todo lo que necesita es una mención de label1. Dado que probablemente usted estará escribiendo código que usa sus controles, probablemente estará haciendo referencia a los campos de todos modos. También puede presionar F12 para ir directamente a las declaraciones donde efectivamente obtiene una lista completa de todos sus controles; puede usar F2 fácilmente para cambiar el nombre de muchos de ellos de una vez.

Por cierto, también utilizo F2 para cambiar el nombre de la mayoría de los nombres de controladores de eventos autogenerados. Por ejemplo, odio ver nombres de métodos como btnZoomIn_Click(). Prefiero llamar al método zoomIn() porque eso es lo que hace. En lugar de Mainform_KeyPress() podría llamarlo processKeyPress().

+0

Gracias por la respuesta, Timwi, estoy al tanto de las capacidades de refactorización de VS. Cambiar el nombre en el tiempo de diseño es mucho más rápido que hacerlo desde el código, sospecho que está optimizado. Al hacerlo desde código, compila todos sus ensamblajes incluso para partes privadas por cualquier razón. Estoy buscando algo que pueda establecer y olvidar, y que no requiera un mantenimiento constante/trabajo humano. –

0

Puede establecer GenerateMember en falso.
Esto no resuelve su problema, pero evite nombrarlo incorrectamente, cuando no trabaje con control manualmente.

0

Resharper puede hacer cumplir las convenciones de nomenclatura. Entonces solo es cuestión de abrir el archivo .designer y presionar alt + enter, ingresar algunas veces.

11

Personalmente, creo que el código generado automáticamente debe excluirse de las pautas de codificación, etc. Es seguro ignorarlos en la mayoría de los escenarios, a menos que el generador tenga un error.

Debatir con quien haya escrito las pautas de codificación y pedirle que excluya el código generado.

+2

Estoy de acuerdo. Si intenta domesticar el código generado automáticamente, nunca conseguirá nada productivo. Puede ser "solo" el código del Diseñador de WinForms hoy, pero mañana podría tener que lidiar con los clientes de WCF, el mapeo de Entity Framework y tal vez incluso monstruos como lo que genera ANTLR. Lex tiene razón, el código generado automáticamente debe excluirse de este tipo de requisitos. –

0

Como dijo BlueRaja, podrías usar Resharper. A continuación, puede utilizar su limpieza de código (Ctrl-E, C), sin embargo, esto no funciona en los archivos generados, por lo que tendrá que cambiar el nombre temporalmente. No estoy en el trabajo, por lo que no puedo verificar si hay una opción para habilitar la opción de archivos generados en alguna parte.

Tenga en cuenta que tendrá que volver a ejecutar esto cada vez que se vuelva a generar el archivo.

2

Sé que es una vieja pregunta, pero he estado trabajando con diseñadores personalizados últimamente y tengo una solución para lo que quieres. Añadir esta clase para proyectar: ​​

using System.ComponentModel; 
using System.ComponentModel.Design; 
using System.Windows.Forms; 
using System.Windows.Forms.Design; 

namespace WindowsFormsApplication1 
{ 
    [Designer(typeof(BaseFormDesigner), typeof(IRootDesigner))] 
    public class BaseForm : Form 
    { 
     public BaseForm() 
     { 
     } 
    } 

    public class BaseFormDesigner : DocumentDesigner 
    { 
     public override void Initialize(IComponent component) 
     { 
      base.Initialize(component); 
      var service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; 
      service.ComponentAdded += service_ComponentAdded; 
     } 

     private void service_ComponentAdded(object sender, ComponentEventArgs e) 
     { 
      if (e.Component is Control && !(e.Component is Form)) { 
       var control = (Control)e.Component; 
       if (!control.Name.StartsWith("_")) { 
        var service = GetService(typeof(IComponentChangeService)) as IComponentChangeService; 
        PropertyDescriptor desc = TypeDescriptor.GetProperties(control)["Name"]; 
        service.OnComponentChanging(e.Component, desc); 
        string oldValue = control.Name; 
        string newValue = "_" + oldValue; 
        desc.SetValue(control, newValue); 
        service.OnComponentChanged(e.Component, desc, oldValue, newValue); 
       } 
      } 
     } 
    } 
} 

Y a continuación, cambiar su clase de forma de la base de la forma al BaseForm:

using System; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : BaseForm 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

cerrar cualquier diseñadores de formularios antes de volver a compilar el proyecto y volver a abrirlo e intentar agregar un control , su nombre comenzará con guión bajo.

Cuestiones relacionadas