2010-02-16 5 views
0

내 도구에서는 패널을 사용하여 페이지를 변경합니다. 각 페이지에는 자체 패널이 있으며 페이지를 변경할 때 컨트롤이있는 패널을 보냅니다. 캔버스로 사용하는 패널에서 다음과 같은 페인트 이벤트가 발생합니다.특정 상황에서 페인팅 된 테두리 실행

private void panelContent_Paint(object sender, PaintEventArgs e) 
    { 
     e.Graphics.CompositingQuality = CompositingQuality.HighQuality; 
     e.Graphics.SmoothingMode = SmoothingMode.HighQuality; 

     // Paints a border around the panel to match the treeview control 
     e.Graphics.DrawRectangle(Pens.CornflowerBlue, 
      e.ClipRectangle.Left, 
      e.ClipRectangle.Top, 
      e.ClipRectangle.Width - 1, 
      e.ClipRectangle.Height - 1); 

     e.Graphics.Flush(); 

     base.OnPaint(e); 
    } 

이 방법은 기본적으로 패널 주위에 멋진 경계선을 그려 더 잘 보입니다. 어떤 이유로이 패널 위에 다른 폼을 이동하면 테두리를 구성하는 선이 조금씩 움직이기 시작합니다. 때때로 작은 선들도 국경에서 그려 질 것입니다. 이 문제는 전체 패널을 다시 그리기 전에 몇 초 동안 만 발생합니다. 이런 일이 일어나지 않도록 내가 할 수있는 일이 있습니까?

답변

0

ClipRectangle은 다시 그리기해야하는 컨트롤 부분을 알려줍니다. 만약 당신이 그것 위로 무언가를 움직이고 있다면 이것은 아마도 여러분의 객체와 움직이는 객체의 교차점이 될 것입니다. 이 정보를 사용하여보다 효율적으로 컨트롤을 다시 칠할 수 있습니다.

직사각형을 (0, 0)에서 (panelContent.Width-1, panelContent.Height-1)까지 그립니다. 매력 같이

+0

방법 : 개인 공극 panelContent_Paint (오브젝트 송신자있는 PaintEventArgs E) { e.Graphics.CompositingQuality = CompositingQuality.HighQuality; e.Graphics.SmoothingMode = SmoothingMode.HighQuality; e.Graphics.DrawRectangle (Pens.CornflowerBlue, 가 panelContent.Width - 1 panelContent.Height - 1); e.Graphics.Flush(); base.OnPaint (e); } 감사합니다. – Icono123

관련 문제