2011-09-27 71 views
9

我正在創建一個可摺疊面板元素,它基本上是一個帶有按鈕元素和按鈕下的面板元素的面板元素。單擊該按鈕會導致相鄰面板具有Visible = false。我想在子面板設置爲不可見時調整包含面板的大小。調整面板大小以適應windows窗體中包含的元素

我已經手工完成這一點,通過設置Size屬性是可見元素的寬度和高度之和(或按鈕或按鍵和子面板。)

我很好奇,想知道但如果有辦法強制調整含有面板的大小而不手動調用Size

我想我正在尋找屬性Dock=Fill的倒數,它會根據元素的大小自動調整元素的大小。

在此先感謝。

+0

我認爲這就是它。也許你可以使用FlowLayoutPanel自動調整其客戶區域內的面板,但我認爲你所做的是正確的。 – mhttk

+0

當沒有人看到它時,調整它的大小是什麼? –

+0

@Hans Passant:對不起,這個問題可能是有趣的。有兩個面板。一個是不可見的,另一個包含按鈕和隱形面板。當內部面板不可見時,外部面板需要收縮,否則它不會塌陷,它會消失,但仍會佔用過去的相同空間。當您展開並摺疊說「公共控件」部分時,我試圖按照您在Visual Studio Forms Toolbox中看到的內容進行操作。 – user420667

回答

8

如何做:

panel1.Size = new Size(0, 0); 
panel1.AutoSize = true; 

,然後而不是改變的知名度,這樣做:

panel1.Controls.Remove(panel2); 

,當你想將其帶回:

panel1.Controls.Add(panel2); 

( panel1是後面板)

+1

偉大的思想。所以AutoSize是我正在尋找的財產。唯一的是,這應該跟一個panel2.BringToFront(),否則它將拋出停靠順序。 – user420667

4

我剛剛嘗試了ispiro給出的答案。您不需要需要刪除並添加控件。設置Visible可以工作。這取決於您何時執行佈局。如果panel2在panel1之前執行佈局,則panel2不會調整大小。爲了更容易,請改用父母PerformLayout

它這樣使用:

panel1.ResumeLayout(false); 
panel2.ResumeLayout(false); 
this.ResumeLayout(false); 
this.PerformLayout(); 
相關問題