如果在表单上创建一个面板并将其设置为Dock=Top,然后拖放另一个面板并设置其Dock=Fill,则该面板可能会填充整个表单,而忽略第一个面板。更改Tab键顺序不起任何作用。
发布于 2010-03-01 22:36:57
停靠布局取决于同级控件的顺序。控件被停靠在“ up”上,因此集合中的最后一个控件首先停靠在上。停靠的控件只考虑以前停靠的同级控件的布局。因此,如果您希望带有Dock=Fill的控件考虑到其他停靠的控件,则它应该是同级顺序中的第一个(顶部)。如果它不是第一个控件,则较早的控件将与其重叠。
这可能会令人困惑,因为同级顺序不一定与视觉顺序相同,并且同级顺序在设计视图中并不总是明显的。
Document outline窗口(View -> Other Windows -> Document outline)提供了控件层次结构和顺序的有用树状视图,并允许您更改控件的同级顺序。
您还可以在设计器中直接更改同级顺序,方法是通过上下文菜单->移到最前面/发送到后面,这会将控件移动到同级中的第一个或最后一个。这些菜单标签可能有些混乱,因为实际效果取决于布局模型。
对于固定位置的控件,2D位置独立于同级顺序,但当控件重叠时,顺序中最早的控件将位于“顶部”,隐藏顺序中较晚的同级的一部分。在这种情况下,带到前面/发送到后面是有意义的。
在流布局面板或表布局面板中,创建顺序决定了控件的视觉顺序。没有重叠的控件。因此,“带到前面”/“发送到后面”实际上意味着在控件的顺序中排在第一或最后。
使用停靠布局时,“放到前面”/“放到后面”可能更加令人困惑,因为它决定了计算停靠的顺序,因此填充停靠控件上的“带到前面”会将控件放在父级的中间,并将所有边缘停靠控件都考虑在内。
发布于 2008-09-30 19:23:32
在带有Dock=Fill的面板上单击鼠标右键,然后单击“移到最前面”。
这会使此控件最后创建,这会考虑同一容器中其他控件上的Dock设置。
发布于 2015-02-12 00:22:50
我也遇到过同样的问题,我设法解决了它。
如果你有一个带有DockStyle.Fill的容器,其他容器也应该有DockStyle,但是Top或者你想要的任何东西。
重要的是首先在控件中添加带有DockStyle.Fill的控件,然后再添加其他控件。
示例:
ComboBox cb = new ComboBox();
cb.Dock = DockStyle.Top;
GridView gv = new GridView();
gv.Dock = DockStyle.Fill;
Controls.Add(gv); // this is okay
Controls.Add(cb);但如果我们把cb放在第一位
Controls.Add(cb);
Controls.Add(gv); // gv will overlap the combo box.https://stackoverflow.com/questions/154543
复制相似问题