在 WinForms 中修改停靠布局

Posted

技术标签:

【中文标题】在 WinForms 中修改停靠布局【英文标题】:Modify docking layout in WinForms 【发布时间】:2013-07-10 21:05:01 【问题描述】:

我的表单上有一个SplitContainer,其 Dock 属性设置为 Fill。它包含几个子控件,其中许多都附加了事件处理程序。后来我决定在我的表格底部放一个StatusStrip。你猜怎么着,我无法将StatusStrip 设置为停靠在我的表单底部。 SplitContainer 将继续填写整个表格。尽管StatusStrip 显然停靠在底部,但它实际上隐藏了SplitContainer 的底部部分。

唯一的方法是剪切SplitContainer,然后将其粘贴回去。剪切SplitContainer 使StatusStrip 成为我表单上的唯一控件,从而让它捕获底部停靠。之后,粘贴SplitContainer 使其填充剩余区域。总之,对接采用先到先服务的方式。

现在,由于我的控件附加了许多事件处理程序,因此剪切和粘贴对我来说是一场噩梦。在 C# 中拥有我的项目意味着我必须手动附加所有这些事件处理程序。

有更好的解决方法吗?

【问题讨论】:

【参考方案1】:

这是拆分器和状态条之间的 z 顺序问题。当您有一个要停靠填充的控件和一个或多个要停靠顶部、左侧、右侧或底部的控件时,您必须让填充控件位于 z 顺序中的第一个。

更好的方法是打开 Document Outline 工具,选择 SplitContainer 并使用向上或向下按钮更改其 z 顺序。

我应该补充一点,在 Winforms 中,z 顺序由您将控件添加到 Controls 集合的顺序指定。该顺序决定了相关系统控件的创建顺序,因此决定了它们的 z 顺序。使用 Document Outline 工具更改 z-order 只会导致生成的代码重新排序。

【讨论】:

正是我需要的。非常感谢。

以上是关于在 WinForms 中修改停靠布局的主要内容,如果未能解决你的问题,请参考以下文章

Winforms:啥决定了停靠是不是移动其他控件

使用自定义 WinForms 控件,我可以更改嵌套控件停靠在里面的矩形吗?

winforms - 表单加载期间带有dockstyle填充的用户控件大小不正确

VS2019 WinForms 在诊断工具中没有显示任何事件

WinForms MdiContainer 菜单

C# Winforms - 控件的滚动条何时初始化?