Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C#: How to get a user control to properly auto size itself

I have a UserControl which consists of a Label (Top), a FlowLayoutPanel (Fill, TopDown flow and no wrap) and a Panel (Bottom). The user control creates a number of controls, based on a list of stuff it gets, and adds them to the FlowLayoutPanel.

How can I get this UserControl to properly resize itself so that the FlowLayoutPanel does not have any scroll bars? I have tried to use various combinations of AutoSize and AutoSizeMode on the FlowLayoutPanel and the UserControl itself, but I can't seem to get it working. Either I end up with something that doesn't resize itself at all, or it doesn't become big enough or it is squished down to almost nothing.

like image 581
Svish Avatar asked Aug 31 '09 07:08

Svish


3 Answers

Thanks for all the suggestions. The solution this time seemed to set AutoSize to true for both the FlowLayoutPanel and the UserControl itself.

Now, how to get the form which will contain this UserControl as well as some other controls, that I can't quite figure out at the moment, but I guess that should be a separate question...

like image 116
Svish Avatar answered Oct 20 '22 13:10

Svish


You can use the Anchor- and Dock property of the UserControl to set options so that the edges of your control gets "glued" to some other parts of your UI. When the UI gets resized, your control will follow along!

If you use anchors and dock on all controls in your user control and set them to dock the edges of the control, the controls will resize with the UserControl and you can now set anchors/dock to the UserControl also.

like image 44
Mickel Avatar answered Oct 20 '22 11:10

Mickel


Wrapping the FlowLayoutPanel in a TableLayoutPanel will allow for proper autosize behavoir.

Your UserControl should look like this:

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

Again, when using that UserControl, it is possible you will need to wrap it in a TableLayoutPanel using an AutoSize row or column.

Watch for SplitContainers since they often throw autosize behaviors out of balance.

like image 2
Bryan Menard Avatar answered Oct 20 '22 12:10

Bryan Menard