SplitContainer面板调整大小问题

mus*_*fan 8 c# splitcontainer winforms

一般问题

该应用程序是C#WinForms .Net 4.0.

我有一个SplitContainer占据大部分形式的东西,它被设置为各个方向的锚点,所以它与表格一起重新调整大小.左侧面板(Panel1)有一个简单的菜单,这里没有问题.右侧面板(Panel2)更复杂,包含许多嵌套的选项卡控件(包含大量控件) - 它非常复杂,但并没有改变.

问题是重新调整表单大小不是很好.事实上,如果您通过缓慢拖动边缘来调整大小然后它可以正常工作,但快速拖动或使用"恢复"按钮(窗体的右上角)然后问题发生.


我的控制层次结构

以下是我的控件层次结构的一个简单示例,它绝对是一个缩减版本,但突出显示嵌套的选项卡控件,它可能有助于复制:

  • 形成
    • 拆分容器(锚点:顶部,左侧,底部,右侧)
      • SC Panel1(最小宽度:300)
        • TreeViewControl(忘记它叫什么)
      • SC Panel2
        • 面板(锚点:顶部,左侧,底部,右侧)
          • 选项卡控件(锚点:顶部,左侧,底部,右侧)
            • 选项卡控件w /许多页面溢出屏幕并需要导航按钮显示在右上角(锚点:顶部,左侧,底部,右侧)

调试细节

经过一些调试后,看起来它实际上是Panel2(拆分容器的子代)没有正确调整大小,实际SplitContainer本身调整得很好.

以下是显示此信息的调试值...

全尺寸表格,在调整大小之前:

splitContainerMain.Width: 1479
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
Run Code Online (Sandbox Code Playgroud)

如预期的那样,splitContainerMain.Panel2.Width小于splitContainerMain.Width.

调整问题后调整大小:

splitContainerMain.Width: 815
splitContainerMain.Panel2.Width: 1206
panelCenter.Width: 1203
tabControlMain.Width: 1215
Run Code Online (Sandbox Code Playgroud)

可以看出,splitContainerMain.Width已根据需要重新调整大小,但splitContainerMain.Panel2.Width其后的孩子却没有.

注意:请记住,如果我手动调整窗体大小,宽度会正确更新 - 这不是我没有正确设置任何锚点的问题.


我的努力到目前为止

我想知道问题是否与此问题有关,但我不准备创建一个新的"MySplitContainer"来尝试解决这个问题.

我试图做的是使用各种Form resize事件并尝试手动设置宽度,但无济于事.我想我想尝试的是Panel2.Width在某种事件中设置值.


我在寻找什么

  • 无论如何都要强制splitContainerMain.Panel2.Width在splitContainerMain尺寸变化时正确调整大小?
  • 或者,我该如何计算Panel2.Width应该是什么?如何从Form.Resize事件中设置该值?(或另一个事件?)

XYZ*_*XYZ 0

从我看来,对于产生问题的控件(包括 splitcontainer 面板),您应该将锚点设置为 none。

另外,我建议使用码头填充属性来最好地使用 splitcontainers。

如果需要进一步帮助,请提供设计师文件,以便更好地查看。