2011-10-07 71 views
5

我使用panel.controls.add向面板添加控件。但是......他们插在最顶端。如何在面板的预览顶部停靠控件下方插入顶部停靠控件

我试过BringToFront和SendToBack方法,但似乎没有工作。

任何想法?由于

编辑:

我想,那是什么,他们停靠在容器的顶部,但如果有另一个停靠控制在那里,一个新的下方显示的是一个......

+1

问题的标题让我有些困惑。要么让他们停靠在容器控制的顶部或底部,哪一个是它的?在任何情况下使用'Dock'属性 –

+0

向我们显示您的代码! – Stormenet

+0

插入它的最顶端是什么意思?你想要在底部的新控件? – Anuraj

回答

13

对接顺序是基于在Controls集合控制的索引。最后一个排在最前面。这就是为什么您添加的控件位于顶部并将现有的停靠控件推下来的原因。使用SetChildIndex()方法将控件移动到索引0:

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

这是对我工作...感谢汉斯。 .. – saggio09

1

“我想要的是他们停靠在容器的顶部,但是如果有另一个停靠的控制器,那么新的显示器会显示在那个下面...”

好吧,我明白了。我看到两个解决方案:

  1. 使用Anchor属性(设置为Top),而不是Dock财产 - 那么这些控件将被放置在由侧顶侧,但他们不会水平拉伸,就不会自动占用所有可用的水平空间(当然,您仍然可以通过编程控制它们的Width)。如果这种限制是你的问题,尽量选择2:

  2. 使用另一个容器控件 - 它可能是一个TableLayoutPanel - 在第一面板的顶部停靠,并然后把剩下的控制在TableLayoutPanel中。使用其集合Columns为彼此旁边的多个控件提供空间。 (在其它容器控件嵌入容器控件设计复杂的布局时是不寻常的,并经常必要的。)

+0

THX为伟大的意见!无法弄清楚并将所有'GroupBoxes'放在一个大的'TableLayoutPanel'中,我可以轻松管理顺序,宽度和高度。 – DarkLite1

+0

@ DarkLite1没问题 - 哇,这个答案已经等了它的第一个给予好评为近5年:) –

+0

更好的后期则从来没有,它救了我很多时间:) – DarkLite1

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) 
    

如果这不是你想要的,你会希望调换或者被添加了什么的顺序(这似乎不太可能)或对接(高达VS向下)。

0

如何重新排列在设计时窗体布局面板:

在设计视图打开窗体。打开文档大纲窗口 - 查看|其他窗口|文档大纲 - (Ctrl + Alt + T)。

文档大纲显示在以相反的顺序一个树视图中的布局板,它们被示出在表格上。在文档大纲窗口中,您可以重新排列面板的顺序。由于相反的顺序,文档大纲顶部显示的内容将位于表单底部。