2012-11-04 3 views
1

가능한 중복 :
How do I suspend painting for a control and its children?
Winforms Double Buffering방지 페인트는 두 번 이상 호출되는

나는 사용자 정의 컨트롤의 무리 (그 81) 각각을 그리는 형태를 갖는다 그중 10 개의 컨트롤 (총 8,100 ish)이 있습니다. 그것은 모두 순차적으로 그려진 것처럼 보입니다 (1 초 정도 걸립니다).

나는 thesetwo 질문에서보고, 양식 및 사용자 지정 컨트롤, 폼에 SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); 모두 this.DoubleBuffered = true 설정 IER 권장 방법을 (다음,하지만 아무것도하지 않은 것으로 보입니다했습니다.

되어 양식의 페인트 기능을 저장하고 대리자에 저장 한 다음 더미 함수로 바꾸어 양식이 다시 그려지는 일이 없도록 한 다음 실제 함수를 다시 넣고 트리거하는 방법이 있습니다.

I 이 작업을 수행하는 표준 방법이 있다고 가정하지만 찾을 수 없습니다 (SuspendLayout/이 아닙니다).레이아웃 로직을 다루는 것).

어떻게하면됩니까?

+1

@HansPassant. 그것은 천천히 완벽하게 그려집니다. 또한 양식의 그림을 일시 중지하지 않습니다. 나는. 이 두 가지 질문은 어떤 관계가 있습니까? – soandos

+0

양식에 코드를 복사/붙여 넣기하는 데 30 초가 걸립니다. –

+0

@HansPassant 이제 큰 검정색 사각형을 렌더링 한 다음 한꺼번에 모두 채 웁니다 (여전히 1 초 정도 걸립니다). 이것은 본질적으로 모든 컨트롤을 만드는 데 많은 시간이 걸리는 것을 의미합니까? 어떻게 측정 할 수 있니? – soandos

답변

1

답변 : (a link)입니다.

하지만 생각해보십시오. Paint이 발생하지 않도록하려면 사용자가 상호 작용할 때 UI 컨트롤이 어떻게 업데이트되어야합니까? 불타는 버튼이 없으며 텍스트 상자 커서가 깜박 거리지 않습니다.

당신은 괜찮 있다면 왜 당신의 배경 이미지로 사용자 컨트롤 그냥 RenderToBitmap 용기? ..이 그와 아무 상관이있다

관련 문제