SplitContainer Panel Resize Issue
c#, splitcontainer, winforms
Solution
Though the question is about 6 years old, I opted to answer this because I was in the same situation as the opening post. Unfortunately, the orientation was not specified. So, my answer would address the ones with Horizontal orientation.
Please translate to C# as this code is in VB.
Private Sub splitContainerMain_Resize(sender As Object, e As EventArgs) Handles splitContainerMain.Resize
'/* This is a work around about panels being left out when SplitContainer is resized */
Dim pnl1Height As Single = splitContainerMain.SplitterDistance '/* Get upper panel height */
Dim pnl2Height As Single = splitContainerMain.Height - splitContainerMain.SplitterDistance '/* Get lower panel height */
splitContainerMain.Panel1.SetBounds(0, 0, splitContainerMain.Width, pnl1Height) '/* Set Upper panel bounds */
'/* Set lower panel bounds, with a top of upper panel height plus splitter width */
splitContainerMain.Panel2.SetBounds(0, pnl1Height + splitContainerMain.SplitterWidth, splitContainerMain.Width, pnl2Height)
End Sub
Problem
The General Problem The application is C# WinForms .Net 4.0. I have a `SplitContainer` that takes up most of the form, it is set to Anchor in all directions so it re-sizes along with the form. The left panel (Panel1) has a simple menu, no problems here. The right panel (Panel2) is more complex and contains a number of nested tab controls (with lots of controls) - it is painfully complex, but it's not changing. The problem is that re-sizing the form doesn't work so well. In fact, if you resize by dragging the edges slowly then it works ok, but drag quickly or use the "restore" button (top-right of form) then the issue occurs. My Control Hierarchy The following is a simple example of my control hierarchy, its definitely a cut down version but does highlight the nested tab control which may help with replication: - Form - Split Container (anchor: top, left, bottom, right) - SC Panel1 (min width: 300) - TreeViewControl (forget what it is called) - SC Panel2 - Panel (anchor: top, left, bottom, right) - Tab Control (anchor: top, left, bottom, right) - Tab Control w/ lots of pages that overflow screen and require the navigation buttons to show in top right corner (anchor: top, left, bottom, right) Debug Details After some debugging it appears that it is in fact `Panel2` (a child of the split container) that doesn't resize properly, and the actual `SplitContainer` itself resizes fine. Here are the debug values that show this... Full width form, before resize: ``` splitContainerMain.Width: 1479 splitContainerMain.Panel2.Width: 1206 panelCenter.Width: 1203 tabControlMain.Width: 1215 ``` All as expected, `splitContainerMain.Panel2.Width` is smaller than `splitContainerMain.Width`. After resize where the issue occurs: ``` splitContainerMain.Width: 815 splitContainerMain.Panel2.Width: 1206 panelCenter.Width: 1203 tabControlMain.Width: 1215 ``` As can be seen, the `splitContainerMain.Width` has resized as desired, but the `splitContainerMain.Panel2.Width` and subsequently its children have not. NOTE: Please remember, the width updates correctly if I manually resize the form slowly - this is not a problem with me not correctly setting any anchors. My Efforts So Far What I have tried to do is use various Form resize events and try to set the widths manually, but to no avail. I think what I would like to try is to set the `Panel2.Width` value from within an event of some sort. What I Am Looking For - Is there anyway to force `splitContainerMain.Panel2.Width` to resize correctly when the `splitContainerMain` size changes? - Alternatively, how can I calculate what the `Panel2.Width` should be? And how can I set that value from the `Form.Resize` event? (or another event?)