如何在面板上的预览顶部停靠控件下方插入顶部停靠控件

时间:2011-10-07 07:36:45

标签: .net vb.net visual-studio-2010

我使用panel.controls.add向面板添加控件。但是......它们插在最顶端。

我尝试了BringToFront和SendToBack方法,但似乎无法正常工作。

有什么想法吗?感谢

编辑:

我想要的是,它们停靠在容器的顶部,但是如果那里有另一个停靠的控件,那么新的控件会显示在那个... ...

5 个答案:

答案 0 :(得分:15)

停靠顺序基于Controls集合中控件的索引。最后一个是最重要的。这就是为什么你的附加控制在顶部并推动现有的停靠控件。使用SetChildIndex()方法将控件移动到索引0:

        var btn = new Button();
        btn.Dock = DockStyle.Top;
        panel1.Controls.Add(btn);
        panel1.Controls.SetChildIndex(btn, 0);

答案 1 :(得分:2)

你有两种方法可以做到这一点。

  1. 按照您希望它们在面板中显示的顺序添加控件,在创建控件时将控件停靠在底部。

    Example:
    Panel.Controls.Add(Label1)
    Panel.Controls.Add(Label2)
    Panel.Controls.Add(Label3)
    
  2. 反转添加到面板的控件的顺序,在创建控件时将控件停靠在顶部。

    Example
    Panel.Controls.Add(Label3)
    Panel.Controls.Add(Label2)
    Panel.Controls.Add(Label1)
    
  3. 如果这不是您想要的,您将要反转所添加的内容(似乎不太可能)或停靠(向上与向下)的顺序。

答案 2 :(得分:1)

“我想要的是,它们停靠在容器的顶部,但是如果那里有另一个停靠的控件,则新的一个显示在那个...”

好的,我理解。我看到两个解决方案:

  1. 使用Anchor属性(设置为Top)而不是Dock属性 - 然后这些控件将放在顶部并排放置,但是它们不会伸展在水平方向上,它们不会自动占用所有可用的水平空间(当然,您仍然可以通过编程方式控制它们的Width)。如果此限制对您来说是个问题,请尝试选项2:

  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();