2009-04-17 3 views
0

사용자 지정 그림 파선 사각형이있는 동안 GDI +에서 문제가 발생합니다.Winform 창을 확장하면 점선 사각형이 단색으로 나타납니다.

점선 사각형의 수직 부분은 창 크기를 늘리거나 위로/아래로 스크롤 할 때 단색의 연속 선으로 나타납니다. 마우스를 빠르게 움직이면 솔리드 섹션이 점점 줄어 듭니다. 흥미롭게도 수평선은이 동작을 나타내지 않고 예상대로 나타납니다.

지금까지이 아닌 최적의 솔루션은 ResizeRedraw = true을 설정하거나 OnResize()OnScroll() 동안 Invalidate()를 호출 할 수 있었다. 물론 내가 실제로 그린 그림이 더 복잡하고 이러한 느린 호출이 유동적 인 경험을 파괴하므로이 문제를 피하고 싶습니다. 또한 새로 표시된 영역 만 무효화하려고 시도했습니다. 전체 무효화 만 작동하는 것 같습니다.

이 문제를 해결하는 방법에 대한 지침이 있습니까?

데모 코드 : 나는 두 가지 문제가 있다고 생각

using System.Drawing; 
using System.Drawing.Drawing2D; 
using System.Windows.Forms; 

public class Form1 : Form 
{ 
    static void Main() 
    { 
     Application.Run(new Form1()); 
    } 

    public Form1() 
    { 
     this.ClientSize = new System.Drawing.Size(472, 349); 

     DoubleBuffered = true; 
     //ResizeRedraw = true; 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     base.OnPaint(e); 

     int dimensions = 70; 

     using (Pen pen = new Pen(Color.Gray)) 
     { 
      pen.DashStyle = DashStyle.Dash; 

      for (int x = 0; x < 20; ++x) 
      { 
       for (int y = 0; y < 20; ++y) 
       { 
        Rectangle rect = new Rectangle(x * dimensions, y * dimensions, dimensions, dimensions); 

        e.Graphics.DrawRectangle(pen, rect); 
       } 
      } 
     } 
    } 
} 

답변

1

: 사각형이 제대로 그려지지 창의 가장자리에있는 영역이있을 나타납니다; 서로 직사각형을 그리면 대시가 제대로 작동하지 않습니다.

은 다음으로 OnPaint를 루프를 교체 : 트릭 마크했다

for (int y = 0; y < Height; y += dimensions) 
    { 
     e.Graphics.DrawLine(pen, 0, y, Width, y); 
    } 
    for (int x = 0; x < Width; x += dimensions) 
    { 
     e.Graphics.DrawLine(pen, x, 0, x, Height); 
    } 
+0

감사합니다. 언급 된 두 문제 모두 사실로 보입니다. 실선은 왼쪽 가장자리에 하나의 직사각형을 그리지 만 오른쪽에는 그려지지 않을 때 나타납니다. 또한, overdrawn 세로 섹션도이 동작을 표시합니다 (오른쪽 직사각형의 오른쪽 라인 만 올바르게 보임). 내 담당자가 게시물을 편집하기에 너무 낮기 때문에 'for'대신 'y

관련 문제