8

Abbiamo implementato nuovi standard di codifica, che richiedono ai nostri membri privati ​​di avere un trattino principale. In questo modo:È possibile modificare la generazione del codice del progettista VS Win Form?

private System.Windows.Forms.Label _label; 

Purtroppo VS sarà messo fuori il default di seguito quando si trascina una nuova etichetta nel form:

private System.Windows.Forms.Label label1; 

C'è un modo per modificare l'impostazione predefinita per:

private System.Windows.Forms.Label _label1; 

Questo riguarda tutti i controlli, non solo le etichette e sì, devono essere utilizzati dal codice.

Cheers,

Plamen

+6

Sicuramente cambierò il nome dall'impostazione predefinita in ogni caso ... – Paddy

+0

Sì, ma il modo in cui lo abbiamo, dovrebbe essere _labelContactName, quindi dobbiamo aggiungere alla fine del nome. Andare all'inizio per aggiungere il carattere di sottolineatura, anche se non è un grosso problema, sembra essere uno spreco. Inoltre, le persone non lo fanno in modo coerente, e immagino che migliorerebbe se il default avesse un carattere di sottolineatura. –

+0

L'etichetta sarà accessibile dal codice. Immagino a questo punto, sto difendendo la questione su motivi di coerenza migliorati solo :). –

risposta

3

Oltre a creare il proprio componente aggiuntivo VS che controlla il codice generato e lo rinomina automaticamente, non c'è modo di ottenere ciò che si desidera.

1

Questa risposta può essere insoddisfacente, ma è il meglio che posso offrire.

Non penso che si possa ottenere che Visual Studio Designer aggiunga automaticamente il carattere di sottolineatura. Tuttavia, ciò che puoi fare è rendere meno doloroso il processo di aggiunta del trattino basso. Basta creare i tuoi oggetti senza prima il carattere di sottolineatura; quindi, usa la funzione Refactor per rinominarli. Basta posizionare il cursore sul nome del campo (label1, nel tuo caso) e premere F2 (o fare clic con il tasto destro del mouse su ⇒ Refactor ⇒ Rinomina). Questo funziona indipendentemente da dove si trovi nel codice, tutto ciò che serve è una menzione di label1. Dato che probabilmente stai scrivendo il codice che usa i tuoi controlli, probabilmente ti riferirai comunque ai campi. Puoi anche premere F12 per andare direttamente alle dichiarazioni in cui ottieni effettivamente un elenco completo di tutti i tuoi controlli; puoi facilmente usare F2 per rinominarne molti in una volta.

Per inciso, utilizzo anche F2 per rinominare la maggior parte dei nomi di gestori di eventi generati automaticamente. Ad esempio, odio vedere nomi di metodi come btnZoomIn_Click(). Preferisco chiamare il metodo zoomIn() perché è quello che fa. Invece di Mainform_KeyPress() potrei chiamarlo processKeyPress().

+0

Grazie per la risposta, Timwi, sono a conoscenza delle capacità di refactoring di VS. Cambiare il nome in fase di progettazione è molto più veloce che farlo dal codice, ho il sospetto che sia ottimizzato. Farlo dal codice compila tutti i tuoi assembly anche per i privati ​​per qualsiasi motivo. Sto cercando qualcosa che posso impostare e dimenticare, e non richiederebbe una costante manutenzione/lavoro umano. –

0

È possibile impostare GenerateMember su false.
Questo non risolve il problema, ma si evita di assegnare nomi errati quando non si lavora manualmente con il controllo.

0

Il resharper può imporre le convenzioni di denominazione. Quindi è solo questione di aprire il file .designer e premere alt + invio, inserire alcune volte.

11

Personalmente ritengo che il codice generato automaticamente debba essere escluso da qualsiasi linea guida di codifica e così via. È sicuro ignorarli nella maggior parte degli scenari, a meno che il generatore non abbia un bug.

Si prega di discutere con chi ha scritto le linee guida di codifica e chiedergli di escludere codice generato.

+2

Sono d'accordo. Se provi a domare il codice generato automaticamente, non otterrai mai nulla di produttivo. Potrebbe essere "solo" il codice di Designer WinForms oggi, ma domani potresti dover gestire i client di WCF, la mappatura di Entity Framework e forse anche i mostri come quello generato da ANTLR. Lex ha ragione, il codice generato automaticamente deve essere escluso da questi tipi di requisiti. –

0

Come ha detto BlueRaja, è possibile utilizzare Resharper. Potresti quindi usare la sua pulizia del codice (Ctrl-E, C), tuttavia questo non funziona sui file generati, quindi dovrai rinominarlo temporaneamente. Non sono al lavoro, quindi non posso controllare se c'è un'opzione per abilitare l'opzione per i file generati da qualche parte.

Si noti che è necessario eseguire nuovamente questa operazione ogni volta che il file viene rigenerato.

2

So che è una vecchia domanda, ma ultimamente ho lavorato con designer personalizzati e ho una soluzione per quello che vuoi. Aggiungere questa classe si proietta:

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); 
       } 
      } 
     } 
    } 
} 

e quindi modificare la vostra base di classe form da forma a BaseForm:

using System; 

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

chiudere qualsiasi forma designer prima di ricompilare il progetto e quindi riaprirlo e provare ad aggiungere un controllo , il suo nome inizierà con il trattino basso.

Problemi correlati