Hi,
we all know how to dock or anchor controls so that they resize themselves accordingly when a form is resized. It works fine till we have rows of controls on left and right size of the form. But what if have three columns (Columns as in visual sense. I'm not talking about any column control containing other controls) of controls? For example a form having a bunch of controls in the left side, a bunch in the middle and a bunch in the right. There may be a few more bunches in the middle. Now while resizing the form, I want the controls to resize accordingly as well as change their positions to make space for the previous bunch of controls that are resizing.
I mean, while the user increases the form size horizontally, the controls of the second bunch should resize and at the same time they should move right because the controls of the first bunch are increasing horizontally too. When the user decreases the form size horizontally the same thing should occur in the reverse order.
I can manage it somehow using nested splitcontainers but that's too cumbersome. I would like to know if there's some better way to achieve it, like setting some property etc.?
Please help. Check the attached image. Please feel free to ask if my post isn't comprehensible. Regards.

Recommended Answers

All 3 Replies

I do not believe that there is such a Property, unless you create one.:)

See if this helps otherwise.
3 Panels (including Labels and TextBoxes as your attached images)

Public Class Form1
    Private iWidth As Integer = 0 '// used to resize.

    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        iWidth = CInt((Me.ClientRectangle.Width - 20) / 3) '// change the "-20" to work as needed for your project.
        Panel1.Width = iWidth : Panel2.Width = iWidth : Panel3.Width = iWidth '// resize Panels.
        Panel2.Left = Panel1.Left + Panel1.Width + 5 : Panel3.Left = Panel2.Left + Panel2.Width + 5 '// set Panels New Locations.
        resizeTextBoxes(Panel1) : resizeTextBoxes(Panel2) : resizeTextBoxes(Panel3) '// resize TextBoxes in Panels.
    End Sub

    Private Sub resizeTextBoxes(ByVal selectedPanel As Panel)
        For Each ctl As Control In selectedPanel.Controls
            If TypeOf ctl Is TextBox Then ctl.Width = (selectedPanel.Width - ctl.Left) - 5 '//  "-5" accumulates the space of TextBox and end of Panel.
        Next
    End Sub
End Class
Member Avatar for Unhnd_Exception

I would use a TableLayoutControl.

6 Columns and 5 Rows.

Columns 1,3,5 would be absolute widths. The Label width
Columns 2,4,6 would be percentage widths of 33.33%

Set the row heights to absolute.

Dock the textboxes to the top of the cells.

It will do exactly what you want.

Thanks to both @codeorder and @Unhnd_Exception

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.