![](/img/trans.png)
[英]how to get the user control itself when clicked on one of its components in c# winform
[英]C#: How to get a user control to properly auto size itself
我有一個UserControl
,它由Label
(Top), FlowLayoutPanel
(Fill,TopDown流程和無包裝)和Panel
(Bottom)組成。 用戶控件根據獲取的內容列表創建許多控件,並將它們添加到FlowLayoutPanel
。
如何讓這個UserControl
正確調整自身大小,以便FlowLayoutPanel
沒有任何滾動條? 我試圖在FlowLayoutPanel
和UserControl
本身上使用AutoSize
和AutoSizeMode
各種組合,但我似乎無法讓它工作。 要么我最終得到的東西根本沒有自我調整,要么它不會變得足夠大或者它被壓縮到幾乎沒有。
感謝所有的建議。 這次解決方案似乎將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.