Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FlowLayoutPanel Height bug when using AutoSize

I have a form holding a TableLayout with 1 column and 3 rows that holds 2 FlowLayoutPanels and a Text box. All Rows are AutoSize, and the column is set to Percentage=100%.

Each FlowLayoutPanel holds several TextBoxes. The FlowLayoutPanels are set: LeftToRight, AutoSize=true, GrowAndShrink, Docking=Fill.

The outline is:

Form
    TableLayout (Dock=Fill)
        FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
           More controls
        FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
           More controls
        TextBox(Dock=Fill, MultiLine=true)

The problem is if I place the FlowLayoutPanel inside a GroupBox which are also set to be AutoSize=true, the FlowLayoutPanel Height are not set correctly and it shows the TextBoxes in 1 line cutting some TextBoxes out of the form.

The outline is:

Form
    TableLayout (Dock=Fill)
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
               More controls
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
               More controls
        TextBox(Dock=Fill, MultiLine=true)

BTW,the same thing happens if I use instead of a GroupBox, a Panel or even a UserControl to hold the FlowLayoutPanel.

BTW 2, this happens even without the TableLayout. I tried placing the GroupBox (with the FlowLayoutPanel) on an AutoSized Form and I get the same behavior.

What I think the problem is that when the FlowLayoutPanel is in another container that is also AutoSized it fails to pass to it's container is preferred size.

What can be done to override this bug??

Please help Thanks, Yoram


p.s: I must use the GroupBox to have a nice frame around the TextBoxes.

like image 399
Yoram Avatar asked Oct 09 '22 20:10

Yoram


1 Answers

Had encountered this problem too, and tried to figure out how to easily resolve this. Although the @GertArnold's answer did help, it felt a bit cumbersome, and I searched for another solution.

What I found was that the Flow Panel's autosize logic was working on the 'minimum' requirements, and by adding a blank Panel, of minimum height I was able to force the Flow Panel's width, thus making all other child controls to be visible.

so in the example above the final layout would be:

Form
    TableLayout (Dock=Fill)
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
                Panel(Dock=Fill, Height = 1, MinimumSize = new System.Drawing.Size( Form.ClientSize.Width - TableLayout.Padding.Horizontal, 1))
                More controls
        GroupBox (Dock=Fill, AutoSize=True, GrowShrink) 
            FlowLayoutPanel(Dock=Fill, AutoSize=True, GrowShrink)
                Panel(Dock=Fill, Height = 1, MinimumSize = new System.Drawing.Size( Form.ClientSize.Width - TableLayout.Padding.Horizontal, 1))
                More controls
        TextBox(Dock=Fill, MultiLine=true)

Hope this helps.

like image 53
Lockszmith Avatar answered Oct 13 '22 09:10

Lockszmith