SplitContainer面板调整大小问题
一般问题
该应用程序是C#WinForms .Net 4.0。
我有一个SplitContainer
占用了大部分表单,它被设置为全方位锚定,因此它随着表单一起重新调整大小。 左面板(Panel1)有一个简单的菜单,这里没有问题。 右侧面板(Panel2)更加复杂,并且包含许多嵌套的选项卡控件(包含许多控件) - 它非常复杂,但不会改变。
问题在于重新调整表格的效果并不理想。 事实上,如果通过缓慢拖动边缘来调整大小,那么它可以正常工作,但可以快速拖动或使用“恢复”按钮(表单右上角),然后就会出现问题。
我的控制层次结构
以下是我的控制层次结构的一个简单示例,它绝对是一个减少版本,但突出显示嵌套的选项卡控件可能有助于复制:
调试细节
经过一些调试后,它看起来实际上是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
及其子splitContainerMain.Panel2.Width
没有。
注意 :请记住,如果我手动调整窗体的大小,宽度会正确更新 - 这对我没有正确设置任何锚点并不是问题。
我的努力到目前为止
我想知道这个问题是否与这个问题有关,但我不准备创建一个新的“MySplitContainer”来尝试解决这个问题。
我试图做的是使用各种Form resize事件,并尝试手动设置宽度,但无济于事。 我想我想尝试的是从某种事件中设置Panel2.Width
值。
我在寻找什么
splitContainerMain.Panel2.Width
在splitContainerMain
大小更改时正确调整大小? Panel2.Width
应该是什么? 我怎样才能从Form.Resize
事件中设置该值? (或其他事件?) 从我看到的你应该设置锚点到没有包括splitcontainer pannels在内的创建问题的控件。
此外,我会建议使用码头填充属性,以最好地使用splitcontainers。
如果需要进一步帮助,请提供设计文件,以便更好看。
完全相同的问题,下面的代码为我工作:
在tableBorder上
Dock = DockStyle.Fill;
在拆分容器上,(不锚定)
Dock = DockStyle.None;
在tableBorder SizeChanged事件上
private void tableBorder_SizeChanged(object sender, EventArgs e)
{
new Thread(() => { resizeMe(); }).Start();
}
private void resizeMe()
{
Thread.Sleep(100);
this.BeginInvoke((Action)(() => {
doIt();
}));
}
private void doIt()
{
splitContainer.Height = tableBorder.Height;
splitContainer.Width = tableBorder.Width;
}
有一个小滞后,但工程
链接地址: http://www.djcxy.com/p/62001.html