【发布时间】:2010-11-23 23:26:23
【问题描述】:
当我们在 WinForms 中添加任何 UI 或容器时,后面添加的组件会覆盖前面添加的组件,可以说它处于更高层。
添加组件后如何更改该层顺序或组件顺序?
【问题讨论】:
标签: c# winforms components layer
当我们在 WinForms 中添加任何 UI 或容器时,后面添加的组件会覆盖前面添加的组件,可以说它处于更高层。
添加组件后如何更改该层顺序或组件顺序?
【问题讨论】:
标签: c# winforms components layer
你试过Z-Order吗?
另请参阅:Control.SentToBack 方法 - 大多数 Winform 控件应因此支持这一点。
【讨论】:
当你在同一个地方放置多个控件时,一个会在上面,另一个会在下面。通常这是一个小错误的结果,例如错误地使用锚定和停靠功能创建可调整大小的表单。但是,在某些情况下,您可能希望重叠控件以获得特定效果。
当控件重叠时,z-index 决定了哪个控件最终位于顶部。基本上,每个控件都存在于其自己不同的编号层中。具有 z-index 层 1 的控件将出现在 z 中的控件上方- 如果它们重叠,则为第 2 层。通常,一组控件的 z-index 由您添加控件的顺序决定,因此您添加的最后一个控件始终位于最顶层(带有 z-index 0)。
但是,您可以更改这些选项。
要确定或设置控件的z-index,可以使用控件集合的GetChildIndex() 和SetChildIndex() 方法。这是一个将控件移动到z-index 中的第三层的示例。
Controls.SetChildIndex(ctrl, 2);
通常,您不需要这种查找粒度的控件。相反,您只需要将控件放到 z-index 的后面(最底层)或将其带到顶部.您可以在设计时通过右键单击控件并选择“置于前端”或“置于后端”来完成此功能。您还可以使用Control.BringToFront() 或Control.SendToBack() 方法以编程方式执行相同的任务。
ctrl.BringToFront(); // This is equivalent to Controls.SetChildIndex(ctrl,0);
【讨论】:
是在代码中还是在设计器中动态加载组件时?如果它在设计器中,您可以使用 Format -> Order -> Send to Back 和 Format -> Order -> Bring to Front 命令。 Send to Back 和 Bring to Front 也可在您右键单击控件时在上下文菜单中使用,以及在“布局”工具栏中应自动出现您在表单设计器中工作。
【讨论】:
在设计器视图中,您还可以打开“文档大纲”面板查看当前表单/控件的树形结构,然后左右拖动组件,“上”和“下”前后移动,以及进出容器。
【讨论】: