2009-08-14 2 views
0

.NET 2.0에서 응용 프로그램을 작성 중이며 WinForms에서 FlowLayoutPanel의 기능이 필요합니다. 나는 추가, 패널 폼에 추가됩니다CF.NET에서 FlowLayoutPanel

/// <summary> 
/// Flowable layout panel 
/// </summary> 
public partial class FlowLayoutPanel : Panel 
{ 
    public FlowLayoutPanel() 
    { 
     InitializeComponent(); 
    } 

    /// <summary> 
    /// Flow the layout of the panel. Required before presentation. 
    /// </summary> 
    public void Layout() 
    { 
     int top = 0; 

     // Set control position 
     foreach (Control ctrl in this.Controls) 
     { 
      ctrl.Top = top; 
      // Account for the scrollbar 
      ctrl.Width = this.Width - 17; 

      top += ctrl.Height; 
     } 
    } 
}

(내 경우에는, 동적으로 생성 된 탭 페이지) : 이것은 내가 그 내가 (주로 레이블) 바로 지금 사용하고 있습니다와 함께 제공되는 코드입니다 폼의 코드 뷰에서 컨트롤은 다음과 같습니다.

panel.Controls.Add(new Label() { Text = "Item name", Font = boldTahoma }); 
panel.Controls.Add(new Label() { Text = item.ItemName }); 
panel.Controls.Add(new Label() { Text = "Category", Font = boldTahoma }); 
panel.Controls.Add(new Label() { Text = item.Category }); 
panel.Controls.Add(new Label() { Text = "Quantity", Font = boldTahoma }); 
panel.Controls.Add(new Label() { Text = item.Quantity }); 

panel.Layout();

그래서 두 가지 질문이 있다고 가정합니다. 작동하지만 더 좋은 방법이 있습니다 (특히 Layout()을 호출 할 필요가 없으므로 특히 그렇습니다). 그래서 라벨을 자동 높이로 만들 수있는 방법이 있습니까? 감사.

답변

2

모든 컨트롤에서 Dock = DockStyle.Top을 설정하거나 OwnerDraw 목록 상자 (OpenNetCF.com에서 사용하는 목록 상자)를 사용할 수 있습니다. 표시해야하는 항목 수에 따라 다릅니다. OwnerDraw ListBox를 사용하면 항목이 많을 때 더 빠르지 만 Panel 접근 방식은 개발하기가 더 쉽습니다.

참고 : 컨트롤을 추가하기 전에 SuspendLayout을 호출하고 완료하면 ResumeLayout을 호출하십시오.

1

이것이 실제 코드 인 경우 전혀 흐트러지지 않습니다. WPF stackPanel을 구현하고 모든 컨트롤에 대해 Dock=DockStyle.Top을 설정하여 동일한 효과를 얻을 수 있습니다. Dock은 CF에서 사용할 수 있습니다.

관련 문제