2009-08-31 4 views
20

ho un UserControl che consiste in un Label (Top), un FlowLayoutPanel (Fill, il flusso TopDown e senza involucro) ed un Panel (in basso). Il controllo utente crea un numero di controlli, basato su un elenco di elementi che riceve e li aggiunge allo FlowLayoutPanel.C#: Come ottenere un controllo utente a correttamente automatico delle dimensioni si

Come posso ottenere questo UserControl per ridimensionare correttamente se stesso in modo che lo non abbia barre di scorrimento? Ho provato a utilizzare varie combinazioni di AutoSize e AutoSizeMode su FlowLayoutPanel e allo stesso UserControl, ma non riesco a farlo funzionare. O finisco con qualcosa che non si ridimensiona affatto, o non diventa abbastanza grande o viene ridotto a quasi nulla.

risposta

11

Grazie per tutti i suggerimenti. La soluzione questa volta sembrava impostare AutoSize su true sia per lo FlowLayoutPanele lo UserControl stesso.

Ora, come ottenere il modulo che conterrà questo UserControl così come alcuni altri controlli, che non riesco a capire al momento, ma suppongo che dovrebbe essere una domanda a parte ...

+0

Sei riuscito a risolvere l'ultima parte? – Macke

+0

@Macke Questo è stato come 6 anni fa, quindi non ne ho idea, hehe. Forse la ricerca di domande poste da me nel momento in cui ho chiesto questo: P – Svish

5

È possibile utilizzare la proprietà Anchora e Dock di UserControl per impostare le opzioni in modo che i bordi del controllo vengano "incollati" ad altre parti dell'interfaccia utente. Quando l'interfaccia utente viene ridimensionata, il tuo controllo seguirà!

Se si utilizzano i punti di ancoraggio e il dock su tutti i controlli nel controllo utente e si impostano per ancorare i bordi del controllo, i controlli verranno ridimensionati con UserControl e ora è possibile impostare anchors/dock anche su UserControl.

+3

Che io sappia, ma non voglio ridimensionare il controllo in base al loro genitore. Voglio che cresca o riduca in modo che sia abbastanza grande da coprire il contenuto di 'FlowLayoutPanel' senza che venga visualizzato alcun messaggio di scroll bar o di ritaglio. – Svish

0

ho scoperto che il modo migliore per risolvere questo è stato quello di utilizzare un codice nell'evento ControlAdded sul FlowLayoutPanel per regolare l'altezza del pannello (l'altezza, perché si stava utilizzando il flusso TopDown) di essere:

e.Control.Location.Y + e.Control.Height + some margin 

e per impostare la proprietà AutoSize sullo stesso usercontrol su True.

Avresti anche bisogno di fare alcuni dei suggerimenti di ancoraggio e ancoraggio come da risposta di Mickel.

Questa funzionalità potrebbe essere incapsulata nel proprio controllo ereditato da FlowLayoutPanel e sovrascrivendo il metodo ControlAdded.

2

Il wrapping di FlowLayoutPanel in un TableLayoutPanel consente il corretto comportamento di autosize.

tuo UserControl dovrebbe essere simile a questo:

UserControl 
    TableLayoutPanel (Dock-Fill) 
     Row1 : Label 
     Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize) 
     Row3 : Panel 

Anche in questo caso, quando si usa che UserControl, è possibile è necessario avvolgerlo in un TableLayoutPanel utilizzando una riga o colonna AutoSize.

Guarda per SplitContainers poiché spesso causano comportamenti di autosize sbilanciati.

0

sull'aggiunta di un controllo al FlowLayout è possibile ridimensionare i controlli già aggiunto della dimensione desiderata senza ottenere le barre di scorrimento per il flusso di layout panel.l

Problemi correlati