Panel.Dock填充,忽略其他Panel.Dock设置

时间:2020-03-06 14:56:31  来源:igfitidea点击:

如果在表单上创建面板并将其设置为Dock = Top并放置另一个面板并设置其Dock = Fill,则它可能会填充整个表单,而忽略第一个面板。更改制表符顺序无济于事。

解决方案

用Dock = Fill右键单击面板,然后单击'Bring to Front'。

这使得该控件最后被创建,并考虑了同一容器中其他控件的Dock设置。

另一个可能更清洁的选项是使用TableLayout控件。为顶部停靠架设置一排所需高度,然后为底部设置另一排以填充100%的高度。将两个面板都设置为Fill,即可完成。

(不过,TableLayout确实需要一些习惯。)

这是一个对我有用的技巧。

放置最上面的项目并将其停靠在最上面。

放置一个拆分器,并将其停靠在顶部,然后将其设置为禁用(除非我们想调整顶部的大小)。

然后放置"填充"对象,并将"停放"设置为"填充"。该对象将保持在拆分器下方。

对接布局取决于同级控件的顺序。控件将停靠在"按钮上",因此集合中的最后一个控件将首先停靠。停靠控件仅考虑了先前停靠的兄弟姐妹的布局。因此,如果希望Dock = Fill的控件考虑其他停靠控件,则该控件应在同级控件中位于第一个(顶部)。如果不是第一个控件,则较早的控件将与它重叠。

这可能会造成混淆,因为同级顺序不一定与视觉顺序相同,并且同级顺序从设计视图中并不总是显而易见的。

"文档大纲"窗口("视图"->"其他Windows"->"文档大纲")提供了有关控件层次结构和顺序的有用树状视图,并允许我们更改控件的同级顺序。

我们也可以直接在设计器中通过上下文菜单-> Bring to front / Send back back来更改兄弟姐妹的顺序,这会将控件移动到兄弟姐妹中的第一个或者最后一个。这些菜单标签可能会有些混乱,因为实际效果取决于布局模型。

对于固定位置的控件,2D位置与兄弟姐妹顺序无关,但是当控件重叠时,最早的控件将在"顶部",从而在该顺序的后面隐藏部分兄弟姐妹。在这种情况下,向前/向后发送是有意义的。

在flowor表布局面板中,创建顺序确定控件的视觉顺序。没有重叠的控件。因此,向前/向后发送实际上意味着按照控件的顺序进行第一个或者最后一个。

使用停靠的布局时,"前移/后退"可能会更加令人困惑,因为它确定了对接的计算顺序,因此,在对接控件上"前移"会将控件放置在父级的中间,并考虑所有边缘对接的控件。