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

75,127

Solution 1

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...

Solution 2

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.

Solution 3

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.

Share:
75,127

Related videos on Youtube

Lemon
Author by

Lemon

Software Developer, Geek, HSP, SDA, ..., open, honest, careful, perfectionist, ... Currently into indoor rowing and rock climbing, just to mention something non-computer-related... Not the best at bragging about myself... so... not sure what more to write... 🤔

Updated on July 09, 2022

Comments

  • Lemon
    Lemon almost 2 years

    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.

  • Lemon
    Lemon over 14 years
    That I know, but I don't want the control to resize according to their parent. I want it to grow or shrink so that it is just big enough to cover the contents of the FlowLayoutPanel without it getting scroll bars or clipping any contents.
  • sonyisda1
    sonyisda1 over 5 years
    Here is a link to an answer for how to get the UserControl loaded on to a form. Basically either add your assembly to Toolbox or rebuild solution.