破線の長方形をカスタムペイントしているときにGDI+で問題が発生しました。
ウィンドウサイズを大きくしたり、上下にスクロールしたりすると、破線の長方形の垂直部分が実線の実線で表示されます。マウスを速く動かすと、ソリッドセクションがますます少なくなります。不思議なことに、水平線はこの動作を示さず、期待どおりに表示されます。
これまでのところ、2つの最適でない解決策は、との間に設定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);
}
}
}
}
}