2011-09-16 6 views
1

컨트롤 목록을 만들려고합니다. 이를 위해 플로우 레이아웃 패널과 커스텀 아이템을 사용했습니다. XML 파일을 읽은 후 플로우 레이아웃 패널에 항목을 채 웁니다. 작은 수의 항목에 대해서는 모든 것이 잘 보이지만 흐름 레이아웃 패널에있는 항목 중 371 개는 잘못된 것입니다. 흐름 레이아웃 패널의 맨 아래에는 95 개의 항목이 누락되어 있고 겹쳐지는 부분이 있습니다. 이 항목에 위치한 공간은 여전히 ​​생성 된 것 같습니다. 제작 된 효과가있는 화면을 첨부합니다. 컨트롤은 배열로 만들어진 다음 해당 배열을 반복하여 컨트롤을 흐름 레이아웃 패널에 추가합니다. 흐름 레이아웃 패널 문제

http://img510.imageshack.us/img510/3201/screen2011916213527199.jpg

감사합니다.

LE :이 모든 별도의 스레드에서 일어나고 있기 때문에

public delegate void AddHistoryItemDelegate(Control itm); 
     public void AddHistoryItem(Control itm) 
     { 
      if (InvokeRequired) 
      { 
       Invoke(new AddHistoryItemDelegate(AddHistoryItem), new object[] { itm }); 
      } 
      else 
      { 
       flowLayoutPanel1.Controls.Add(itm); 
      } 
     } 
foreach (Control c in histroryItems) 
      { 
       controls++; 
       backgroundWorkerLoadHistory.ReportProgress(controls); 
       //flowLayoutPanel1.Controls.Add(c); 
       AddHistoryItem(c); 
      } 

대리인이 있습니다. histroryItems는 컨트롤 목록입니다.

LE : 계산에 따르면 목록에서 항목을 제거하면 목록이로드 된 후 정리됩니다. 스레드의 끝에서 컨트롤을 추가하고 제거하는 경우 약간의 해킹을 시도해도 아무런 효과가 없습니다.

+0

C 번호는 FlowPanel이없는 : A는 숨겨진 (하지 속성 창에서)도 스크롤 휠을위한 있습니다. 또는 어떤 Conbtrols. –

+0

은 Winforms의 FlowLayoutPanel에 관한 것입니다. 누락 된 태그를 유감스럽게 생각합니다. – andySF

답변

3

이 작업을 시도 할 수 :

 this.flowLayoutPanel1.SuspendLayout(); 

컨트롤과를 추가하기 전에 :

 this.flowLayoutPanel1.ResumeLayout(); 

을 컨트롤을 추가 한 후. 아마 다음은 연속적으로 수행해야합니다

 this.flowLayoutPanel1.PerformLayout(); 

및/또는 :

 this.flowLayoutPanel1.Refresh(); 
1

는 내가이 일을 남겼 :

private void flpChoices_Scroll(object sender, ScrollEventArgs e) 
{ 
    Control c=flpChoices.GetChildAtPoint(new Point(10, 10), GetChildAtPointSkip.None); 
    if (c == null) flpChoices.PerformLayout(); 
} 

flpChoicesFlowLayout Panel입니다. 이제는 스크롤 휠 이벤트가 마우스 휠의 움직임에서 발생한다고 생각하지 않습니다. 그래서 그것에 대해 어떻게해야할지 모르겠습니다.

편집 :

void flpChoices_MouseWheel(object sender, MouseEventArgs e) 
{ 
    Control c=flpChoices.GetChildAtPoint(new Point(10, 10), GetChildAtPointSkip.None); 
    if (c == null) flpChoices.PerformLayout(); 

} 
+0

정보를 제공해 주셔서 감사합니다. 나는 그것이 어떻게 작동하는지 시험해 볼 것이다. 그러나 디자인을 변경했으며 "더로드 ..."버튼을 사용하고 있습니다 :) – andySF

+0

작동합니까? 모범이 있습니까? 나는 이것을 해커처럼 행복하게 생각하지 않는다. – Plater