首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >忽略其他Panel.Dock设置的Panel.Dock填充

忽略其他Panel.Dock设置的Panel.Dock填充
EN

Stack Overflow用户
提问于 2008-09-30 19:23:17
回答 10查看 102.4K关注 0票数 163

如果在表单上创建一个面板并将其设置为Dock=Top,然后拖放另一个面板并设置其Dock=Fill,则该面板可能会填充整个表单,而忽略第一个面板。更改Tab键顺序不起任何作用。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2010-03-01 22:36:57

停靠布局取决于同级控件的顺序。控件被停靠在“ up”上,因此集合中的最后一个控件首先停靠在上。停靠的控件只考虑以前停靠的同级控件的布局。因此,如果您希望带有Dock=Fill的控件考虑到其他停靠的控件,则它应该是同级顺序中的第一个(顶部)。如果它不是第一个控件,则较早的控件将与其重叠。

这可能会令人困惑,因为同级顺序不一定与视觉顺序相同,并且同级顺序在设计视图中并不总是明显的。

Document outline窗口(View -> Other Windows -> Document outline)提供了控件层次结构和顺序的有用树状视图,并允许您更改控件的同级顺序。

您还可以在设计器中直接更改同级顺序,方法是通过上下文菜单->移到最前面/发送到后面,这会将控件移动到同级中的第一个或最后一个。这些菜单标签可能有些混乱,因为实际效果取决于布局模型。

对于固定位置的控件,2D位置独立于同级顺序,但当控件重叠时,顺序中最早的控件将位于“顶部”,隐藏顺序中较晚的同级的一部分。在这种情况下,带到前面/发送到后面是有意义的。

在流布局面板或表布局面板中,创建顺序决定了控件的视觉顺序。没有重叠的控件。因此,“带到前面”/“发送到后面”实际上意味着在控件的顺序中排在第一或最后。

使用停靠布局时,“放到前面”/“放到后面”可能更加令人困惑,因为它决定了计算停靠的顺序,因此填充停靠控件上的“带到前面”会将控件放在父级的中间,并将所有边缘停靠控件都考虑在内。

票数 354
EN

Stack Overflow用户

发布于 2008-09-30 19:23:32

在带有Dock=Fill的面板上单击鼠标右键,然后单击“移到最前面”。

这会使此控件最后创建,这会考虑同一容器中其他控件上的Dock设置。

票数 115
EN

Stack Overflow用户

发布于 2015-02-12 00:22:50

我也遇到过同样的问题,我设法解决了它。

如果你有一个带有DockStyle.Fill的容器,其他容器也应该有DockStyle,但是Top或者你想要的任何东西。

重要的是首先在控件中添加带有DockStyle.Fill的控件,然后再添加其他控件。

示例:

代码语言:javascript
复制
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放在第一位

代码语言:javascript
复制
Controls.Add(cb);
Controls.Add(gv); // gv will overlap the combo box.
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/154543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档