문제

나는 GDI+에 문제가있는 동안 커스텀 페인팅은 직사각형을 쳤다.

점선 사각형의 수직 부분은 창 크기가 증가 할 때 또는 위/아래로 스크롤 할 때 견고하고 연속적인 선으로 나타납니다. 마우스를 더 빨리 움직이면 단단한 섹션이 줄어 듭니다. 흥미롭게도 수평선은이 동작을 나타내지 않으며 예상대로 나타납니다.

지금까지 두 개의 비 최적 솔루션이 설정되었습니다 ResizeRedraw = true 또는 전화합니다 Invalidate() ~ 동안 OnResize() 그리고 OnScroll(). 물론 내가 실제로 그리는 것이 더 복잡하기 때문에 이것을 피하고 싶습니다.이 느린 전화는 유체 경험을 파괴합니다. 나는 또한 새로 표시된 영역 만 무효화하려고 시도했습니다.

이것을 해결하는 방법에 대한 조언이 있습니까?

데모 코드 :

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);
                }
            }
        }
    }
}
도움이 되었습니까?

해결책

두 가지 문제가 있다고 생각합니다. 직사각형이 올바르게 그려지지 않는 창의 가장자리에 영역이있는 것 같습니다. 그리고 당신은 서로 위로 사각형을 그리므로 대시는 제대로 작동하지 않습니다.

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);
   }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top