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

Posted

技术标签:

【中文标题】Winforms:啥决定了停靠是不是移动其他控件【英文标题】:Winforms: What Determines if Docking Moves Other ControlsWinforms:什么决定了停靠是否移动其他控件 【发布时间】:2014-02-18 15:33:18 【问题描述】:

例如,在 TabPage 中,我有一个停靠在“填充”的 DataGridView。如果我将 UserControl 的停靠属性设置为“右”位置,则 DataGridView 会按预期向左移动。如果我用面板或标签(也停靠在 TabPage 内的“右”)替换 UserControl,则 DataGridView 不会腾出空间。 Panel 或 Label 只是覆盖 DataGridView。我尝试了***并做了一些阅读,但没有看到任何规则(还)。谢谢。

【问题讨论】:

【参考方案1】:

他们的 Z 顺序。您可以使用“置前”和“移到后”上下文菜单项对其进行操作,右键单击控件以查看菜单。

当您使用 View + (Other Windows) + Document Outline 窗口时会更加清晰,它会在容器下方按 Z 顺序列出它们。并允许您拖放控件以更改其顺序,您可以立即在设计器中看到效果。

【讨论】:

对于在运行时添加的控件,它们的 z 顺序是 Controls 集合中的索引,对吗?从底部(第一次添加)到顶部(最后添加)? 是的。索引 0 是 Z 顺序的顶部。 Controls.Add() 在末尾追加,将控件放在 Z 顺序的底部。 Controls.SetChildIndex() 来改变它。 这与我的猜测完全相反。谢谢。

以上是关于Winforms:啥决定了停靠是不是移动其他控件的主要内容,如果未能解决你的问题,请参考以下文章

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

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

停靠面板布局

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

DockManager如何停靠 z

Ctrl +向左/向右移动焦点到其他控件