2012-03-17 3 views
2

나는 WinForms를 가지고 놀고 있으며 테두리가있는 레이블을 많이 추가하여 일종의 그리드를 만들고 싶습니다. 이제 라벨을 추가하는 것만으로도 충분합니다.WinForm에 많은 라벨 추가하기

for (int i = 0; i < 60; i++) 
     { 
      for (int j = 0; j < 60; j++) 
      { 
       var label = new Label(); 
       label.BorderStyle = BorderStyle.FixedSingle; 
       label.SetBounds(i * 10, j * 10, 10, 10); 
       this.Controls.Add(label); 
      } 
     } 

하지만 실제로는 정말 느립니다. 나는 각 사각형이 개별적으로 그려지는 것을 거의 볼 수있다. Control의 배열을 만들고 Controls.AddRange()를 사용하여 추가 할 때도 마찬가지입니다.

이제는 3600 개의 컨트롤을 그리는 동안 약간 느린 것으로 상상할 수 있지만 더 나은 방법이 있다고 생각합니다. Control.AddRange() 문을 실행하면 Stopwatch에서 약 1600ms 걸린다 고합니다. 실제 그림은 조금 더 오래 걸리는 것처럼 보입니다.

이 문제를 해결하고 많은 종류의 컨트롤을 사용하는 응용 프로그램을 신속하고 신속하게 처리 할 수있는 방법이 있습니까?

답변

4

당신은 개별 제어가 필요하십니까? 이와 같은 작업을 통해 저는 보통 usercontrol에서 onpaint를 덮어 쓰고 텍스트와 상자를 직접 그립니다. 그런 다음 사용자 입력이 필요한 경우 사용자 지정 텍스트의 단일 텍스트 상자 온탑 위치를 지정하십시오.

+0

일종의, 나는 실제로 어떤 종류의 미로를 만들고 A *를 사용하여 2 점에서 최단 경로를 찾으려고합니다. 하지만 Label 클래스에서 파생되어 OnPaint를 재정의 할 수 있다고 생각합니다. 어디 보자 :) – fuaaark

2

은 Form1.designer.cs입니다에서 힌트를 가지고 :

this.SuspendLayout(); 

// code to add Labels 

this.ResumeLayout(false); // maybe use true 
+0

예, 눈에 띄는 효과가 없습니다. – fuaaark