簡體   English   中英

C#:如何讓用戶控件正確自動調整大小

[英]C#: How to get a user control to properly auto size itself

我有一個UserControl ,它由Label (Top), FlowLayoutPanel (Fill,TopDown流程和無包裝)和Panel (Bottom)組成。 用戶控件根據獲取的內容列表創建許多控件,並將它們添加到FlowLayoutPanel

如何讓這個UserControl正確調整自身大小,以便FlowLayoutPanel沒有任何滾動條? 我試圖在FlowLayoutPanelUserControl本身上使用AutoSizeAutoSizeMode各種組合,但我似乎無法讓它工作。 要么我最終得到的東西根本沒有自我調整,要么它不會變得足夠大或者它被壓縮到幾乎沒有。

感謝所有的建議。 這次解決方案似乎將FlowLayoutPanel UserControl本身的AutoSize設置為true

現在,如何獲取將包含此UserControl的表單以及其他一些我目前無法理解的控件,但我想這應該是一個單獨的問題......

您可以使用UserControl的Anchor-和Dock屬性來設置選項,以便控件的邊緣“粘合”到UI的其他部分。 當UI調整大小時,您的控件將隨之而來!

如果您在用戶控件中的所有控件上使用錨點和停靠點並將它們設置為停靠控件的邊緣,則控件將使用UserControl調整大小,您現在也可以將錨點/停靠點設置為UserControl。

FlowLayoutPanel包裝在TableLayoutPanel中將允許適當的自動調整行為。

您的UserControl應如下所示:

UserControl
    TableLayoutPanel (Dock-Fill)
        Row1 : Label
        Row2 : FlowLayoutPanel (Panel:Dock-Fill AND AutoSize, Row:AutoSize)
        Row3 : Panel

同樣,在使用UserControl ,您可能需要使用AutoSize行或列將其包裝在TableLayoutPanel

注意SplitContainers因為它們經常會使autosize行為失去平衡。

我發現解決這個問題的最好方法是在flowlayoutpanel上的ControlAdded事件中使用一些代碼來調整面板的高度(因為你使用的是TopDown流,所以高度)是:

e.Control.Location.Y + e.Control.Height + some margin

並將usercontrol本身的AutoSize屬性設置為True。

根據Mickel的回答,您還需要做一些對接和錨定建議。

此功能可以封裝到您自己的控件中,該控件繼承自FlowLayoutPanel並覆蓋ControlAdded方法。

在向flowlayout添加控件時,您可以將已添加的控件的大小調整為所需的大小,而無需獲取流布局panel.l的滾動條。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM