2009-08-03 4 views
15

Je développe une application Windows Forms (.NET 2.0, VS 2005). J'ai une forme qui contient essentiellement un panneau qui est dynamiquement redimensionnement de la forme:Comment faire apparaître les barres de défilement dans un panneau redimensionnable lorsque le contrôle contenu est trop grand pour cela?

this.panel1.Dock=DockStyle.Fill; 

Ce panneau est simplement utilisé comme un conteneur. Lors de l'exécution, un contrôle personnalisé sera ajouté:

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

Comme ce contrôle personnalisé a une exigence de taille minimale, je veux des barres de défilement apparaissent sur le panneau contenant si elle est trop petite pour afficher tout le contrôle:

this.panel1.AutoScroll=true; 

Cela ne fonctionne pas. J'ai essayé de redimensionner le panneau en utilisant la propriété Anchor plutôt que la propriété Dock, en vain.

Répondre

24

Ne pas ancrer votre contrôle utilisateur. Utilisez la propriété Anchor à la place. (Ancre aux quatre côtés). Définissez vous la propriété de contrôle utilisateur MinimumSize Définissez la propriété AutoScrollMinSize du panneau

Les barres de défilement du panneau n'apparaît pas sauf si vous définissez sa propriété AutoScrollMinSize. La définition du Dock à Remplir du contrôle utilisateur semble masquer les barres de défilement du panneau.

+10

La propriété Dock est très bien pour le contrôle du panneau et de l'utilisateur, tant que AutoScrollMinSize est défini (http://social.msdn.microsoft.com/Forums/ fr-FR/winforms/thread/56267eb1-25af-4df2-82a3-0498563c7eef). – Mac

+0

Ancrage n'est pas la même chose que Docking. Par exemple, si je rend invisible un contrôle ancré, il réorganise automatiquement les contrôles suivants. L'ancrage ne vous donne pas cette capacité. L'ancrage est très utile, mais comme le dit l'OP, cela ne fonctionne pas toujours comme vous le souhaiteriez avec un contrôle Autoscroll parent - même lors de la définition de la taille minimale du contrôle ancré – Gwynge

2

Après InitializeComponent sous la forme de dialogue, je l'ai fait et il a semblé fonctionner:

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

J'ai un tas de sous-panneaux dans la table. Toutes les lignes et colonnes sont définies sur AutoSize. Pour une raison quelconque, le contrôle n'est pas assez intelligent pour indiquer au contrôle de défilement que c'est sa taille préférée.

1

Panel.AutoScroll = * True fonctionne - MAINTENANT! J'ai joué et joué avec les idées ci-dessus, à la fois pour le contrôle du panneau et de l'utilisateur, et enfin réinitialiser tout à la valeur par défaut, définir Autoscroll sur le panneau, et ... voilà! en quelque sorte cela fonctionne à nouveau ... allez comprendre ...

Questions connexes