2011-06-22 12 views
4

這是在winforms中。我正在創建一個用戶控件,該控件基本上是一個用其他用戶控件填充的FlowlayoutControl。我需要添加的每個控件停靠在前面的頂部(從左到右)。不幸的是,它看起來像flowlayoutcontrol忽略任何停靠屬性。有沒有辦法將控件停靠在那裏?我需要它從左到右填充項目,但項目應該像列表視圖一樣佈置。由於其確定採取何種方法的事實,Theres確實沒有我可以提供的代碼。Winforms:FlowLayoutPanel with Docking

回答

4

FlowLayoutPanel.FlowDirection Property表示FlowLayoutPanel的控制的流動方向的間距。

FlowLayoutPanel.WrapContents Property指示FlowLayoutPanel控件是否應該包裝其內容或剪裁內容。

+0

@Akram,WrapContents屬性解決了控件相互填充的問題,謝謝。我現在的問題是讓userControls從左到右填充所有的方式。 – Alex

+0

@Alex:您是否考慮過在這裏使用[TableLayoutPanel](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.tablelayoutpanel.aspx)? –

+0

我有和當我使用TableLayoutPanel它沒有檢測滾動條時,他們需要。即使AutoScroll設置爲true。 – Alex

1

FlowLayoutPanel的對接屬性用於面板本身(例如,如果您想將FlowLayoutPanel停靠在窗體的左側等),而不是其內部的控件容器。

嘗試用DefaultPadding和DefaultMargin性質播放,這些適用於控制它包含

+0

感謝您的回覆,但是我指的是在flowlayoutpanel內的Usercontrols的對接屬性,而不是面板本身。 – Alex

+0

另外,我試圖將用戶控件的Dock屬性設置爲DockStyle.Top和DockStyle.Fill,但是,當我這樣做時,它不繪製控件。但它仍然顯示滾動條。我不明白爲什麼當它停靠時不能控制它。 – Alex

10

讓FlowLayoutPanel停靠在右邊是非常棘手的。從最初的問題來看,你想要像列表視圖。重要的是要知道列表中的一個項目(最寬的)在FlowLayoutPanel中定義了一個「虛擬列」。其餘的項目將遵循它。您可以通過將其中一個項目拖到右側來在VS設計器中證明這一點。 '虛擬專欄'會跟着它,如果你的其他項目被鎖定,他們會跟隨虛擬專欄。

請注意,您不能錨定定義列的控件。它沒有什麼可以固定的,奇怪的事情會發生。

做所有這些以編程方式處理FlowLayoutPanel上的佈局事件,並將類似於下面的代碼的代碼。在設計器中,所有項目中的所有項目都不會停靠並且將其錨定設置爲「無」,這一點非常重要。我昨天花了一天的時間在設計師那裏做下面的代碼。

flowLayoutPanel.Controls[0].Dock = DockStyle.None;     
flowLayoutPanel.Controls[0].Width = flowLayoutPanel.DisplayRectangle.Width - lowLayoutPanel.Controls[0].Margin.Horizontal; 

for (int i = 1; i < flowLayoutPanel.Controls.Count; i++) 
{ 
    flowLayoutPanel.Controls[i].Dock = DockStyle.Top; 
} 
+0

感謝您訂閱Layout事件的想法。這就是我所需要的,我只是根據父級的寬度手動設置子控件的寬度。 – jeromeyers