2013-06-04 10 views
2

나는 여러 탭 페이지를 추가/제거하는 TabControl을 가지고 있습니다.TabControl 깜박임

탐색 버튼이 표시되도록 충분한 페이지를 추가 할 때 깜박임 문제가 발생합니다.

내비게이션 버튼 (왼쪽/오른쪽으로 탐색 할 두 개의 화살표) 이 표시되지 않습니다. 플리커는 폼이나 페이지를 추가하는 것과 관련이 없습니다.

나는 시도했다 : 내 주요의 WinForm에서, 나는이 코드를 추가 :

  • 편집

(성능 향상을 위해 ... 모든 PARAMS)

  • SetStyles을 DoubleBuffering 내 창 크기를 조정할 때 렌더링 버그를 방지하려면 :

    protected override CreateParams CreateParams 
    { 
        get 
        { 
         CreateParams cp = base.CreateParams; 
         cp.ExStyle |= 0x02000000; 
         return cp; 
        } 
    } 
    

    제거하면 TabControl에서 더 이상 깜박 거리지 않습니다. 일정한 깜박임이 더 편리하기 때문에 크기 조정 렌더링 버그로 인해 살아야 할 것 같습니다.

  • +0

    그리기 또는 페인트 이벤트를 어딘가에 오버라이드하거나 피기 배킹한다고 가정합니다 ... 볼 수 있습니까? – DonBoitnott

    +0

    그리기 및 페인트 이벤트는 변경되지 않습니다. –

    +0

    winforms == 깜박임. 나는 거기에서 탈출구가 없다고 생각합니다. –

    답변

    6

    중요한 세부 사항을 생략했습니다. This question은 사용자가 설명한 것 이상을 강력하게 제안했지만 양식의 CreateParams 속성을 재정 의하여 해당 창에 대한 WS_EX_COMPOSITED 스타일 플래그를 설정합니다. 폼과 모든 컨트롤을 이중 버퍼링 할 수 있으므로 일반적으로 깜박임을 억제하는 좋은 방법입니다.

    하지만 몇 가지 유해한 부작용이있을 수 있습니다. TabControl 실제로 문제가 메이커, WS_EX_COMPOSITED 함께 호환되지 않는 렌더링 방법에 대해 뭔가 엉망이됩니다. 너무 많은 탭이 추가되고 탐색 버튼이 나타나면 계속해서 다시 그려집니다. 빠른 깜박임으로 인식됩니다. 네이티브 탭 컨트롤 렌더러에는 많은 버그가 있습니다. 작성한 Microsoft 팀은 매우 비참한 작업을 수행했습니다.

    이 버그에 대해 알려진 해결 방법이 없으므로 더 적은 대안으로 해결해야합니다.

    +0

    WS_EX_COMPOSITED는 모든 경우에 적합한 솔루션이 아닙니다. 약 15 개의 DataGridviews와 약 75 개의 컨트롤 (textBoxes, comboboxes, radio, check ...)이있는 17 개의 tabPages를 제어하는 ​​약 2 개의 tabControls와 100 % 내 응용 프로그램에서 사용하는 CPU 코어 – sgissinger

    0

    안녕하세요. 조금 늦었을 수도 있지만, TabControlthis.Multiline = true;을 사용했습니다. 이렇게하면 TabControl이 탭 수가 여러 개의 사용 가능한 시각적 공간으로 이동하는 경우 여러 줄의 탭을 자동으로 조정할 수 있습니다.

    한 줄에 모든 탭을 유지해야하는 특별한 요구 사항이 없으면이 기능을 사용해야합니다.