1

winformsアプリケーションでは、ユーザー コントロール (という名前) を使用してpanel、このパネルで描画を行っています。ただし、すでにダブルバッファリングを使用しています

public Panel()
{            
    //double-buffering
    SetStyle(ControlStyles.AllPaintingInWmPaint, true);
    SetStyle(ControlStyles.DoubleBuffer, true);
    SetStyle(ControlStyles.UserPaint, true);
    SetStyle(ControlStyles.ResizeRedraw, true); 
}

それでも、画面上の図形を塗りつぶすと、画面がちらつきます。

また、塗りつぶす領域を計算する計算の数を行っていPaint()ます。

前もって感謝します。

4

1 に答える 1

0

これが役立つかどうかはわかりません。しかし、直接ではなくInvalidateメソッドとOnPaintイベントを使用すると、点滅しません( ):PaintDoubleBuffering = true

public partial class Form1 : Form
{
    private Graphics g = null;
    private Pen z = new Pen(new SolidBrush(Color.Blue));

    public Form1()
    {
        InitializeComponent();
        g = CreateGraphics();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        e.Graphics.DrawLine(z, p, p2);
    }

    private Point p = new Point();
    private Point p2 = new Point();

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (e.Button == System.Windows.Forms.MouseButtons.Left)
            p = e.Location;

        p2 = e.Location;

        Invalidate();
    }
}
于 2012-12-13T14:14:05.503 に答える