如何在面板上预览顶部停靠控件下方插入顶部停靠控件
Posted
技术标签:
【中文标题】如何在面板上预览顶部停靠控件下方插入顶部停靠控件【英文标题】:How to insert top docked controls below previewsly top docked controls on a panel 【发布时间】:2011-12-02 19:33:34 【问题描述】:我使用 panel.controls.add 向面板添加控件。但是...它们插入到它的最顶部。
我尝试了 BringToFront 和 SendToBack 方法,但似乎不起作用。
有什么想法吗?谢谢
编辑:
我想要的是它们停靠在容器的顶部,但是如果那里有另一个停靠的控件,则新的控件会显示在该控件的下方...
【问题讨论】:
你的问题的标题让我有些困惑。您希望它们停靠在容器控件的顶部还是底部,它是哪一个?在任一情况下都使用Dock
属性
在最顶端插入是什么意思?您想要底部的新控件吗?
我想要的是它们停靠在容器的顶部,但是如果那里有另一个停靠的控件,则新的控件会显示在那个下方...
【参考方案1】:
使用 FlowLayoutPanel 并在此面板中添加所有控件。
在下一个控件中添加最新的控件
flowLayoutPanel1.FlowDirection = FlowDirection.LeftToRight;
flowLayoutPanel1.AutoScroll = true;
Label label1 = new Label();
flowLayoutPanel1.Controls.Add(label1);
label1.SendToBack();
【讨论】:
【参考方案2】:如何在设计时重新排列表单上的布局面板:
在设计视图中打开您的表单。打开文档大纲窗口 - 查看|其他窗口|文档大纲 - (Ctrl+Alt+T)。
文档大纲在树视图中以与它们在表单上显示的相反顺序显示布局面板。在“文档大纲”窗口中,您可以重新排列面板的顺序。由于顺序相反,文档大纲顶部显示的内容将位于表单底部。
【讨论】:
【参考方案3】:你有两种方法可以做到这一点。
按照您希望它们在面板中显示的顺序添加控件,在创建它们时将控件停靠到底部。
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)
如果这不是您想要的,您将需要颠倒添加的顺序(这似乎不太可能)或停靠(向上与向下)的顺序。
【讨论】:
【参考方案4】:停靠顺序基于 Controls 集合中控件的索引。最后一个在上面。这就是为什么您添加的控件位于顶部并将现有的停靠控件向下推的原因。使用 SetChildIndex() 方法将控件移动到索引 0:
var btn = new Button();
btn.Dock = DockStyle.Top;
panel1.Controls.Add(btn);
panel1.Controls.SetChildIndex(btn, 0);
【讨论】:
【参考方案5】:“我想要的是它们停靠在容器的顶部,但如果那里有另一个停靠的控件,则新的控件会显示在该控件的下方...”
好的,我明白了。我看到了两种解决方案:
使用Anchor
属性(设置为Top
)而不是Dock
属性 - 然后这些控件将并排放置在顶部,但是它们不会水平拉伸,它们不会自动占据所有可用的水平空间(当然,您仍然可以通过编程方式控制它们的Width
)。如果此限制对您来说是个问题,请尝试选项 2:
使用另一个容器控件 - 它可能是 TableLayoutPanel
- 将其停靠在第一个面板的顶部,然后然后将其余控件放入该 TableLayoutPanel 中。使用其Columns
集合为多个控件提供空间。 (在其他容器控件中嵌入容器控件并不罕见,并且在设计复杂布局时通常是必要的。)
【讨论】:
感谢您的建议!想不通,把所有的GroupBoxes
放在一个大的TableLayoutPanel
中,我可以轻松地管理顺序、宽度和高度。
@DarkLite1 没问题 - 哇,这个答案已经等了近 5 年了:)
迟到总比永远好,它为我节省了很多时间:)以上是关于如何在面板上预览顶部停靠控件下方插入顶部停靠控件的主要内容,如果未能解决你的问题,请参考以下文章