2011-10-07 81 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)。

文檔大綱顯示在以相反的順序一個樹視圖中的佈局板,它們被示出在表格上。在文檔大綱窗口中,您可以重新排列面板的順序。由於相反的順序,文檔大綱頂部顯示的內容將位於表單底部。