WinForm 창을 확장 할 때 점선이 견고하게 나타납니다
문제
나는 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);
}
제휴하지 않습니다 StackOverflow