gpt4 book ai didi

c# - SplitContainer 面板调整大小问题

转载 作者:太空狗 更新时间:2023-10-29 19:48:16 27 4
gpt4 key购买 nike

一般问题

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

我有一个 SplitContainer 占据了大部分表单,它在所有方向上都设置为 anchor ,因此它会随着表单调整大小。左侧面板 (Panel1) 有一个简单的菜单,这里没有问题。右侧面板 (Panel2) 更复杂,包含许多嵌套的选项卡控件(有很多控件)- 它非常复杂,但没有变化。

问题是调整表单大小效果不佳。事实上,如果您通过缓慢拖动边缘来调整大小,则它可以正常工作,但快速拖动或使用“恢复”按钮(表单右上角)则会出现问题。


我的控件层次结构

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

  • 表格
    • 拆分容器( anchor :顶部、左侧、底部、右侧)
      • SC 面板 1(最小宽度:300)
        • TreeViewControl(忘记叫什么了)
      • SC 面板 2
        • 面板( anchor :顶部、左侧、底部、右侧)
          • 选项卡控件( anchor :顶部、左侧、底部、右侧)
            • 带有许多溢出屏幕的页面的选项卡控件,需要导航按钮显示在右上角( anchor :顶部、左侧、底部、右侧)

调试细节

经过一些调试后,它似乎实际上是 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 及其子项没有。

注意:请记住,如果我手动缓慢调整表单大小,宽度会正确更新 - 这不是我没有正确设置任何 anchor 的问题。


到目前为止我的努力

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


我在寻找什么

  • splitContainerMain 大小改变时,是否有强制 splitContainerMain.Panel2.Width 正确调整大小的方法?
  • 或者,我如何计算 Panel2.Width 应该是多少?我如何从 Form.Resize 事件中设置该值? (或其他事件?)

最佳答案

虽然这个问题已经有 6 年了,但我选择回答这个问题是因为我和开篇的情况一样。不幸的是,没有指定方向。因此,我的回答将解决水平方向的问题。

请翻译成 C#,因为此代码是在 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

关于c# - SplitContainer 面板调整大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18079004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com