2011-12-22 5 views
1

내가 이 vb.net에 VB6에서 사용자 정의 컨트롤을 업그레이드하고이 포함 된 사용자 정의 컨트롤을로드합니다.
vb6 응용 프로그램에서 레이블 컨트롤 배열을 사용하여 3000 개의 레이블을로드하고 있습니다.
vb.net에서 동일한 작업을하고 있지만로드하는 데 너무 많은 시간이 걸립니다.
vb6에서는 1 ~ 2 초가 소요되지만 vb.net에서는 30 ~ 40 초가 소요됩니다.
무엇이 문제입니까? 같은 작업을 위해 vb.net에서 너무 많은 시간이 걸리는 이유는 무엇입니까?vb.net는 레이블 컨트롤 배열

코드는 아래와 같습니다 여기 Led는 레이블 컨트롤의 배열입니다.

For l = 1 To 3000 
    Led.Load(ledCounter) 
    ColLed.Add(Led(ledCounter)) 
    Led(ledCounter).BackColor = System.Drawing.ColorTranslator.FromOle(LedColor) 
    Led(ledCounter).Top = VB6.TwipsToPixelsY(15) 
    Led(ledCounter).Left = VB6.TwipsToPixelsX(15) 
    Led(ledCounter).Height = VB6.TwipsToPixelsY(LedHeight) 
    Led(ledCounter).Width = VB6.TwipsToPixelsX(LedWidth) 
    Led(ledCounter).BorderStyle = Windows.Forms.BorderStyle.None 
    Led(ledCounter).BackColor = System.Drawing.ColorTranslator.FromOle(LedColor) 
    Led(ledCounter).Visible = True 
Next 
+3

그러면 3000 개의 라벨이 필요한 이유는 무엇입니까? –

답변

3

VB6에서 레이블은 windowless (lightweight) control입니다. 윈도우 핸들을 가지고 있지 않으므로 OS와 관련하여 존재하지 않습니다. 이 컨트롤 뒤에있는 코드는 마우스가있는 위치를 확인하고 부모 컨트롤에서 드로잉을 수행합니다. VB.NET에서

그러나 라벨은 창 핸들을 가지고 있으며, 따라서 본격적인 컨트롤입니다 "존재한다." number of available window handles is limited (그리고 속도가 느리기 때문에) 수천 개를 생성하는 것은 나쁜 생각입니다.

당신은 당신의 디자인을 수정하고 어떤 종류의 그리드를 사용하는 것이 좋습니다.

+0

또는 창문이없는 컨트롤 그리기. 'Control'에서 상속 받고'Graphics' 클래스를 사용하여 필요한 모든 도면을 처리하십시오. 그런 다음 하나의 컨트롤 (창 핸들) 만 갖게됩니다. –

+0

코디 그레이, 답변 해 주셔서 감사합니다. –

+1

@ 사다르 : 나는 정교하게 다른 방법을 모르겠습니다. 기본적으로 사용자 지정 컨트롤을 만들고 있습니다. 그렇게하는 법을 모르는 경우 댓글에 설명 할 수있는 것보다 훨씬 많은 부분이 있습니다. .NET WinForms에서 사용자 정의 컨트롤을 만드는 방법에 대한 책을 검색하십시오. 기본적으로 모든 드로잉을 직접 관리하는 사용자 지정 컨트롤을 사용하면 하나의 창 핸들 만 가질 수 있지만 원하는대로 그릴 수 있습니다. 광범위한 커스터마이징이 정말로 필요한 경우가 아니라면 기성품 컨트롤을 사용하는 GSerg의 솔루션이 훨씬 더 좋은 선택입니다. 등'DataGridView','ListView','TreeView'을 확인 –