2011-09-27 11 views
9

Sto creando un elemento del pannello comprimibile, che sarebbe essenzialmente un elemento del pannello con un elemento del pulsante e un elemento del pannello sotto il pulsante. Facendo clic sul pulsante, il pannello adiacente avrà Visible = false. Vorrei ridimensionare il pannello di contenimento quando il pannello secondario è impostato su invisibile.Ridimensiona il pannello per adattarlo agli elementi contenuti nei moduli di Windows

ho fatto manualmente, impostando la proprietà Size essere la somma delle larghezze e altezze degli elementi visibili (il pulsante o il pulsante e il pannello del bambino.)

Sono curioso di sapere anche se c'era un modo per forzare il ridimensionamento del pannello contenente senza chiamare manualmente Size.

Immagino di dover cercare l'inverso della proprietà Dock=Fill, che ridimensiona automaticamente gli elementi in base alla dimensione del loro elemento contenitore.

Grazie in anticipo.

+0

Penso che sia esso. Forse puoi usare FlowLayoutPanel per regolare automaticamente i pannelli all'interno della sua area client, ma penso che quello che stai facendo sia corretto. – mhttk

+0

Qual è il punto di ridimensionamento quando nessuno può vederlo? –

+0

@Hans Passant: Siamo spiacenti, la domanda potrebbe essere stata formulata in modo divertente. Ci sono due pannelli. Uno è quello che diventa invisibile e l'altro contiene il pulsante e il pannello invisibile. Il pannello esterno deve restringersi quando il pannello interno diventa invisibile, altrimenti non collassa, sta semplicemente scomparendo ma continua a occupare lo stesso spazio a cui era abituato. Stavo cercando di fare qualcosa sulla falsariga di ciò che vedete in Visual Studio Forms Toolbox quando espandete e comprimete la parte "Common Controls". – user420667

risposta

8

ne dite di fare:

panel1.Size = new Size(0, 0); 
panel1.AutoSize = true; 

e poi invece di cambiare la visibilità, fare questo:

panel1.Controls.Remove(panel2); 

e quando si vuole riportarlo:

panel1.Controls.Add(panel2); 

(panel1 è il pannello posteriore)

+1

Ottimo pensiero. Quindi AutoSize era la proprietà che stavo cercando. L'unica cosa è che questo dovrebbe essere seguito da un panel2.BringToFront() o che rimuova l'ordine di docking. – user420667

4

Ho appena provato la risposta data da ispiro. È necessario non rimuovere e aggiungere il controllo. L'impostazione Visible può funzionare. Dipende da quando si esegue il layout. Se panel2 esegue il layout prima di panel1, panel2 non verrà ridimensionato. Per semplificare, usa invece i genitori PerformLayout.

E 'usato in questo modo:

panel1.ResumeLayout(false); 
panel2.ResumeLayout(false); 
this.ResumeLayout(false); 
this.PerformLayout(); 
Problemi correlati