我使用panel.controls.add向面板添加控件。但是......它们插在最顶端。
我尝试了BringToFront和SendToBack方法,但似乎无法正常工作。
有什么想法吗?感谢
编辑:
我想要的是,它们停靠在容器的顶部,但是如果那里有另一个停靠的控件,那么新的控件会显示在那个... ...
答案 0 :(得分:15)
停靠顺序基于Controls集合中控件的索引。最后一个是最重要的。这就是为什么你的附加控制在顶部并推动现有的停靠控件。使用SetChildIndex()方法将控件移动到索引0:
var btn = new Button();
btn.Dock = DockStyle.Top;
panel1.Controls.Add(btn);
panel1.Controls.SetChildIndex(btn, 0);
答案 1 :(得分:2)
你有两种方法可以做到这一点。
按照您希望它们在面板中显示的顺序添加控件,在创建控件时将控件停靠在底部。
Example:
Panel.Controls.Add(Label1)
Panel.Controls.Add(Label2)
Panel.Controls.Add(Label3)
反转添加到面板的控件的顺序,在创建控件时将控件停靠在顶部。
Example
Panel.Controls.Add(Label3)
Panel.Controls.Add(Label2)
Panel.Controls.Add(Label1)
如果这不是您想要的,您将要反转所添加的内容(似乎不太可能)或停靠(向上与向下)的顺序。
答案 2 :(得分:1)
“我想要的是,它们停靠在容器的顶部,但是如果那里有另一个停靠的控件,则新的一个显示在那个...”
好的,我理解。我看到两个解决方案:
使用Anchor
属性(设置为Top
)而不是Dock
属性 - 然后这些控件将放在顶部并排放置,但是它们不会伸展在水平方向上,它们不会自动占用所有可用的水平空间(当然,您仍然可以通过编程方式控制它们的Width
)。如果此限制对您来说是个问题,请尝试选项2:
使用另一个容器控件 - 它可以是TableLayoutPanel
- 将其停靠在第一个面板的顶部,然后将其余控件放在该TableLayoutPanel中。使用其Columns
集合为彼此旁边的多个控件提供空间。 (在其他容器控件中嵌入容器控件并不罕见,在设计复杂布局时通常是必需的。)
答案 3 :(得分:0)
如何在设计时重新排列表单上的布局面板:
在“设计”视图中打开表单。打开文档大纲窗口 - 查看|其他窗口|文档大纲 - ( Ctrl + Alt + T )。
“文档大纲”以树形视图中的布局面板显示它们在窗体上显示的相反顺序。在“文档大纲”窗口中,您可以重新排列面板的顺序。由于相反的顺序,文档大纲顶部显示的内容将位于表单的底部。
答案 4 :(得分:0)
使用FlowLayoutPanel并在此面板中添加所有控件。
将以下最新的contrtol添加到上一个控件
flowLayoutPanel1.FlowDirection = FlowDirection.LeftToRight;
flowLayoutPanel1.AutoScroll = true;
Label label1 = new Label();
flowLayoutPanel1.Controls.Add(label1);
label1.SendToBack();