2009-08-03 9 views
15

Sto sviluppando un'applicazione Windows Form (.NET 2.0, VS 2005). Ho una forma che contiene essenzialmente un pannello che è dinamicamente ridimensionata con la forma:Come far apparire le barre di scorrimento in un pannello ridimensionabile quando il controllo contenuto è troppo grande per questo?

this.panel1.Dock=DockStyle.Fill; 

Questo pannello è semplicemente utilizzato come contenitore. In fase di esecuzione, verrà aggiunto un controllo personalizzato:

UserControl uc=new UserControl(); 
panel1.Controls.Add(uc); 
uc.Dock=DockStyle.Fill; 

Dato che questo controllo personalizzato ha un requisito minimo di dimensione, voglio barre di scorrimento a comparire sul pannello contenente se diventa troppo piccola per mostrare l'intero controllo:

this.panel1.AutoScroll=true; 

Questo non funziona. Ho provato a ridimensionare il pannello usando la proprietà Anchor piuttosto che la proprietà Dock, senza alcun risultato.

risposta

24

Non collegare il controllo utente. Utilizzare invece la proprietà Anchor. (Ancora su tutti e quattro i lati). Proprietà MinimumSize regolerà del controllo utente Impostare la proprietà AutoScrollMinSize del pannello

barre di scorrimento del pannello non apparirà se non si imposta la sua proprietà AutoScrollMinSize. L'impostazione del Dock da riempire del controllo utente sembra nascondere le barre di scorrimento del pannello.

+10

La proprietà Dock va bene sia per il pannello che per il controllo utente, purché sia ​​impostato AutoScrollMinSize (http://social.msdn.microsoft.com/Forums/ it-IT/WinForms/thread/56267eb1-25af-4df2-82a3-0498563c7eef). – Mac

+0

L'ancoraggio non è lo stesso del Docking. Ad esempio, se rendi invisibile un controllo ancorato, esso riorganizza automaticamente i seguenti controlli. L'ancoraggio non ti dà questa abilità. L'ancoraggio è molto utile, ma come l'OP dice che non funziona sempre come si spera con un controllo Autoscroll genitore - anche quando si imposta la dimensione minima del controllo ancorato – Gwynge

2

Dopo InitializeComponent in forma di dialogo, ho fatto questo ed è sembrato funzionare:

tableLayoutPanel1.AutoScrollMinSize = tableLayoutPanel1.GetPreferredSize(new Size(1, 1)); 

Ho un sacco di sotto-pannelli nella tabella. Tutte le righe e le colonne sono impostate su AutoSize. Per qualche ragione, il controllo non è abbastanza intelligente da dire al controllo di scorrimento che è la dimensione preferita.

1

Panel.AutoScroll = * Vere opere - ORA! Ho giocato e giocato con le idee di cui sopra, sia per il pannello che per il controllo dell'utente, e infine resettavo tutto al valore predefinito, impostando Scorrimento automatico sul pannello e ... voilà! in qualche modo funziona di nuovo ... vai a capire ...