2010-11-04 13 views
17

Una delle più amate e odiate opere di Visual Studio deve essere il progettista di moduli.Funzioni nascoste del designer di winforms di Visual Studio

Creare un semplice modulo/layout di controllo utente in genere è un gioco da ragazzi. Impostare le proprietà e aggiungere eventi è facile.

Impostare la casella degli strumenti per utilizzare i propri controlli può essere un po 'più difficile e far sì che le ToolBoxIcons vengano visualizzate può essere un problema. L'utilizzo di componenti di terze parti tramite l'ereditarietà visiva può comportare il lancio del progettista. E l'utilizzo dell'ereditarietà su designerable può essere davvero difficile.

Quindi quali sono le tue caratteristiche preferite "nascoste" o ovvie per lo studio visivo.

+0

Non potrei essere più d'accordo su ToolBoxBitmap - non l'ho mai fatto funzionare, anche dopo aver provato una dozzina di "soluzioni" diverse. Comincio a pensare che sia una cosa del mito ... –

+0

Informazioni su toolboxbitmap. Funziona solo se impostato correttamente e quando il riferimento DLL è impostato su una DLL separata e non nella stessa soluzione. – CodingBarfield

risposta

22
  • Tenere premuto CTRL e trascinare un controllo di duplicarlo.

NOTA: Attenzione, se il controllo ha un gestore di eventi che è stato creato dal il progettista, si assocerà il vostro controllo appena creato con il gestore di eventi così come il vecchio controllo.

  • Usare la scorciatoia da tastiera F7 per passare dalla visualizzazione di progettazione alla visualizzazione del codice, e Shift-F7 per passare dalla visualizzazione del codice per la vista progettista. Lo utilizzo costantemente

  • La finestra "Struttura del documento" è essenziale per l'uso pesante del progettista. Ciò consente di riordinare i controlli nella struttura per portarli in primo piano o inviarli di nuovo. È particolarmente utile quando lavori con i controlli di docking. Puoi anche spostare un controllo figlio su un altro genitore, o portarlo fuori da un controllo contenitore, o spostare un genitore in un contenitore, ecc ...

View -> Other Windows -> Document Outline

  • La barra degli strumenti "Layout" è grande per le cose in fila per fare un'interfaccia utente cercando pulito.

View -> Toolbars -> Layout

+5

Maiusc F7 si alterna tra visualizzazione codice e vista designer. – CodingBarfield

+1

Struttura del documento è esattamente ciò che stavo cercando e non riuscivo a trovare da nessun'altra parte su Googlewebz. – orfdorf

2

Tutte le proprietà sui controlli utente verranno visualizzate dal progettista e riempite con i valori predefiniti per il tipo di dati. L'aggiunta dell'attributo DesignerSerializationVisibility con Nascosto come valore non riempirà questa proprietà con alcun valore predefinito.

<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> 

Questo è un ottimo modo per ridurre al minimo il codice di progettazione. Un'altra opzione è DefaultValue.

<DefaultValue(somevalue)> 

In questo modo il progettista utilizzerà il valore specificato come valore predefinito per la selezione.

Il progettista sovrascriverà i valori dei campi di supporto e i valori di inizializzatore se non si utilizzano questi attributi.

Un altro che può essere difficile da trovare: Menu - Visualizza - Ordine di tabulazione

È possibile modificare l'ordine di tabulazione cliccando vostri campi. Questa opzione è visibile solo mentre il designer è attivo.

+0

Un altro suggerimento è impostare CodingBarfield

4

Provo a codificare i miei metodi di gestore di eventi quando i moduli vengono inizializzati anziché consentire al progettista di occuparsene. Ho notato che il designer perderà questi eventi di volta in volta. Codificando il tuo, assicurati che si attacchino.

myButton.Click += new System.EventHandler(this.myButtonClick) 
+1

Posso essere abbreviato nella versione .NET più recente: myButton.Click + = this.myButtonClick – pettys

1

rotto progettista:

Studio A volte visivo non mostrerà il parametro di opzione/Codice Designer per. Non ho individuato le cause di ciò esattamente, ma la combinazione di progetti vb.net e C# durante l'utilizzo di devexpress sembra essere una ragione.

Fintanto che lo studio visivo viene eseguito, non vedrà improvvisamente che le mie forme/i nostri controlli possono essere progettati. Chiudere lo studio visivo e cambiare il file di progetto di solito aiuta.

Originariamente il file di progetto conteneva

<Compile Include="cboTargetGroupFlights.cs"> 

Modifica che, per la riapertura e il progetto ha causato Visual Studio di ricontrollare tutte le forme/usercontrols e ha mostrato ancora una volta il designer.

<Compile Include="cboTargetGroupFlights.cs"> 
    <SubType>Component</SubType> 
</Compile> 

Sapevate che è possibile impostare la vista codice come predefinita dopo aver fatto doppio clic su qualcosa nella vista soluzione. Fare clic con il pulsante destro del mouse sul file e selezionare Apri con ... e utilizzare il pulsante Imposta come valori predefiniti.

4

È possibile aggiungere le proprie snapline a UserControls.

La classe seguente è denominata CenterSquare e ha un Designer aggiunto ad esso denominato CenterSquareSnapLines che fornisce un elenco di snapline all'interno del controllo. Se hai i tuoi controlli che rendono più piccoli i loro bordi, ora puoi aggiungere le tue linee.

public class CenterSquareSnapLines : ControlDesigner 
{ 

    public override System.Collections.IList SnapLines 
    { 
     get 
     { 
      ArrayList snapLines = base.SnapLines as ArrayList; 
      CenterSquare c = this.Control as CenterSquare; 
      if (c != null) 
      { 
       snapLines.Add(new SnapLine(SnapLineType.Left, c.BorderDistance)); 
       snapLines.Add(new SnapLine(SnapLineType.Right, c.Height - c.BorderDistance)); 
       snapLines.Add(new SnapLine(SnapLineType.Top, c.BorderDistance)); 
       snapLines.Add(new SnapLine(SnapLineType.Bottom, c.Width - c.BorderDistance)); 
       snapLines.Add(new SnapLine(SnapLineType.Top, 5)); 
      } 
      else 
      { 
       //Debug message here! 
      } 
      return snapLines; 
     } 
    } 

} 

[Designer(typeof(CenterSquareSnapLines))] 
public partial class CenterSquare : UserControl 
{ 
//implementation goes here 
} 
+0

Guardare anche a: http://stackoverflow.com/a/945486/27472 –

4

Sapevate che è possibile eseguire il debug del designer?

È possibile avviare una soluzione singola due volte e utilizzare "Allega al processo" per eseguire il debug di un ambiente devenv che esegue i controlli del designer. Questo può essere particolarmente utile per eseguire il debug di "strani" problemi di progettazione che danno pochissime informazioni in caso contrario.

L'ho usato per individuare un problema di progettazione per alcuni servizi remoti che sono stati avviati e non ha funzionato attivando un'eccezione non gestita e interrompendo il progettista. Tutto quello che ho visto alla desigerview sono state alcune classi di helper interne allo studio visivo che si sono schiantate.

7

Quando il designer WinForms progetto è aperto in un modulo o un utente di controllo e di aver nidificato controlli figlio, è possibile spostare il fuoco fuori del controllo figlio attualmente concentrata al suo controllo padre premendo il tasto Esc. Premendo di nuovo il tasto Esc si sposta la messa a fuoco sul relativo genitore e così via fino a quando non si raggiunge finalmente la cima.

Problemi correlati