一般问题
该应用程序是 C# WinForms .Net 4.0。
我有一个SplitContainer
占据大部分表格的表格,它在所有方向上都设置为锚点,因此它会随着表格重新调整大小。左侧面板(Panel1)有一个简单的菜单,这里没有问题。右侧面板 (Panel2) 更复杂,包含许多嵌套的选项卡控件(有很多控件)——它非常复杂,但它并没有改变。
问题是重新调整表单的大小并不能很好地工作。事实上,如果您通过缓慢拖动边缘来调整大小,那么它可以正常工作,但快速拖动或使用“恢复”按钮(表单右上角)就会出现问题。
我的控制层次结构
以下是我的控件层次结构的一个简单示例,它绝对是一个精简版本,但确实突出显示了可能有助于复制的嵌套选项卡控件:
- 形式
- 拆分容器(锚点:上、左、下、右)
- SC Panel1(最小宽度:300)
- TreeViewControl(忘记它叫什么)
- SC面板2
- 面板(锚点:上、左、下、右)
- 选项卡控件(锚点:上、左、下、右)
- 带有大量溢出屏幕并需要导航按钮显示在右上角的页面的选项卡控件(锚点:上、左、下、右)
- 选项卡控件(锚点:上、左、下、右)
- 面板(锚点:上、左、下、右)
- SC Panel1(最小宽度:300)
- 拆分容器(锚点:上、左、下、右)
调试详细信息
经过一些调试后,实际上Panel2
(拆分容器的一个子项)似乎没有正确调整大小,而实际SplitContainer
本身的大小调整得很好。
以下是显示这一点的调试值...
全宽形式,调整大小之前:
splitContainerMain.Width: 1479
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
一切如预期,splitContainerMain.Panel2.Width
小于splitContainerMain.Width
。
调整发生问题的大小后:
splitContainerMain.Width: 815
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
可以看出,splitContainerMain.Width
已根据需要调整了大小,但splitContainerMain.Panel2.Width
随后其子代没有。
注意:请记住,如果我手动缓慢地调整表单大小,宽度会正确更新 - 这不是我没有正确设置任何锚点的问题。
我迄今为止的努力
我尝试做的是使用各种表单调整大小事件并尝试手动设置宽度,但无济于事。我想我想尝试的是Panel2.Width
从某种事件中设置值。
我在寻找什么
- 当大小发生变化时,是否有强制
splitContainerMain.Panel2.Width
正确调整大小的方法splitContainerMain
? - 或者,我如何计算
Panel2.Width
应该是什么?以及如何从Form.Resize
事件中设置该值?(或其他事件?)