当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Panel.Dock填充忽略其他Panel.Dock设置》经验,为你挑选了4个好方法。

如果在窗体上创建面板并将其设置为Dock = Top并放下另一个面板并设置其Dock = Fill,则可能会填充整个窗体,而忽略第一个面板.更改Tab键顺序不起作用.



1> JacquesB..:

停靠布局取决于兄弟控件的顺序.控件停靠在"按钮向上",因此集合中的最后一个控件首先停靠.停靠控件仅考虑先前停靠的兄弟姐妹的布局.因此,如果您希望将其他停靠控件考虑在内,那么使用Dock = Fill的控件应该是兄弟顺序中的第一个(顶部).如果它不是第一个控件,则早期控件将重叠它.

这可能令人困惑,因为兄弟顺序不一定与视觉顺序相同,并且兄弟顺序在设计视图中并不总是显而易见的.

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

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

对于固定定位控件,2D位置与兄弟顺序无关,但是当控件重叠时,顺序中最早的控件将"在顶部",稍后将按顺序隐藏兄弟姐妹的一部分.在这种情况下,带到前面/发送到后面是有道理的.

在内部流程或表格布局面板中,创建顺序决定了控件的可视顺序.没有重叠的控件.所以带到前面/后面发送真的意味着按照控件的顺序制作第一个或最后一个.

使用停靠布局时,前置/后置发送可能会更加混乱,因为它确定了对接的计算顺序,因此填充对接控件上的"前置"会将控件置于父对象的中间,考虑所有边缘停靠控件.


TL;博士; 用Dock = Fill右键单击面板,然后单击"Bring to Front".
"文档大纲"窗口的+1.从来不知道这存在,但它是如此有用.
我怎么能以编程方式执行此操作?我的意思是,我正在动态添加控件,所以我无法使用设计器来执行此操作.
@Camilo:如果动态添加控件,则应按所需顺序添加控件.

2> Jeff Cuscuti..:

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

这使得此控件最后创建,它考虑了同一容器中其他控件的Dock设置.



3> John Rudy..:

另一个可能更清晰的选择是使用TableLayout控件.为顶部底座设置所需高度的一行,为底部填充另一行100%.将两个面板都设置为Fill,然后就完成了.

(TableLayout确实需要一些时间来习惯.)



4> 小智..:

我遇到了同样的问题,我设法解决了这个问题.
如果你有一个容器与 DockStyle.Fill其他人也应该有DockStyle但顶部或任何你想要的.
重要的是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.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有