Winフォームウィンドウを展開するときに破線の長方形が表示され、固体

StackOverflow https://stackoverflow.com/questions/758761

  •  09-09-2019
  •  | 
  •  

質問

カスタムペイントは、長方形を破線ながら

私は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);
                }
            }
        }
    }
}
役に立ちましたか?

解決

私は2つの問題があると思う:長方形が正しく描画されていないウィンドウの端の領域が存在するようです。そしてあなたは威勢のいいが正しく動作しませんので、お互いの上に四角形を描画しています。

次のようにあなたの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