2010-12-04 7 views
1

시작 화면에 이어 3 초 동안 표시되는 시작 화면이있는 간단한 프로그램을 만들면 주 폼이로드됩니다. 그러나, 내 기본 폼이로드 될 때, 내 모든 컨트롤을로드하는 과정에 있습니다. (내 페이지에 36 개의 버튼이 있습니다 ... 룰렛 테이블을 사용하는 것입니다). 따라서 내 기본 양식이 처음 1-2 초 동안 표시되는 동안이 버튼을 모두로드하고 추한 것처럼 보입니다. 내 스플래시 화면이나 다른 방법으로 3 초 동안이 양식을로드하는 방법은 무엇입니까? 감사합니다컨트롤이로드 된 후 주 폼을 표시하는 방법


for (i = 0; i < 36; i++) 
{ int j, k; j = i % 3; k = i/3; 
    button[i] = new Label(); 
    button[i].Location = new Point(80 + (41*j), 64 + (20*k)); 
    button[i].Cursor = Cursors.Hand; 
    etc etc. 
} 
+0

WinForms 또는 Web? – adopilot

+0

기본 WinForm을 사용하고 있습니다. – Nick

+0

뭔가가 있습니다. – Nick

답변

3

그것은 그냥 버튼을 칠하는 데 필요한 시간을보고있는 그들을로드되지 않습니다. 쉽게 다시 확인할 수 있습니다 : 양식을 최소화하고 복원하십시오. 이것은 2 초 정도 걸리며 하이 엔드에 있습니다. 아마 그런 식으로 느껴지거나 매우 힘이 약한 하드웨어를 가지고있을 것입니다. 36 개의 버튼이 있으면 그림을 볼 수있는 상태에 가까워집니다. 특히 그림이있는 경우에는 더욱 그러합니다. 버튼에 넣은 이미지의 크기가 맞는지 확인하고 버튼에 맞게 크기를 조정해야 비싸고 페인팅 시간에 먹습니다.

Aero가 활성화 된 Vista 또는 Win7에서 실행하지 않으면 시작 화면에서이 문제를 해결할 수 없습니다. 불투명도 속성을 사용하여 타이머를 사용하여 0에서 0.99로 증가시키면서 다소 숨길 수 있습니다. 진정한 해결 방법은 버튼을 사용하지 않고 양식의 OnPaint() 메소드 재정의로 룰렛 테이블을 그립니다. 그러나 마우스 히트 테스트를 수행하는 코드를 추가해야합니다.

A QD 수정은 전체 양식을 이중 버퍼링하여 오프 스크린 비트 맵으로 렌더링 한 다음 결과를 화면에 블리 팅하는 것입니다. 그것은 그림의 속도를 높이 지 않습니다. 단지 더 이상 눈에 띄지 않습니다. 이 코드를 폼 클래스에 붙여 넣어 Windows XP 이상에서 기본 제공 지원을 사용하십시오.

protected override CreateParams CreateParams { 
    get { 
    CreateParams cp = base.CreateParams; 
    cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED 
    return cp; 
    } 
} 
+0

음, 이중 버퍼가 확실히 도움이되었습니다. 내가 다룰 수있는 어떤 것입니다. 기본적으로 지금처럼 보이는 것은 36 개의 버튼을 매우 빠르게 반복하여 모든 것을 투명하게 만듭니다. – Nick

관련 문제