如何在Panel上绘制以使其不闪烁?

Ich*_*ann 3 c# drawing panel visual-studio-2010 winforms

这是我的代码.当我将光标移动到Form上时,圆圈正在移动,但它正在闪烁.我怎样才能解决这个问题?

public partial class Preprocesor : Form
{
    int x, y;
    Graphics g;

    public Preprocesor()
    {
        InitializeComponent();
    }

    private void Preprocesor_Load(object sender, EventArgs e)
    {
        g = pnlMesh.CreateGraphics();
    }

    private void pnlMesh_Paint(object sender, PaintEventArgs e)
    {
        g.Clear(Color.White);
        g.FillEllipse(Brushes.Black, x, y, 10, 10);
    }

    private void pnlMesh_MouseMove(object sender, MouseEventArgs e)
    {
        x = e.X;
        y = e.Y;
        pnlMesh.Invalidate();
    }
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

您需要使用双缓冲控件.

创建一个在构造函数中继承Control和设置的类DoubleBuffered = true;(这是一个受保护的属性).
使用该控件而不是面板,它不会有任何闪烁.

此外,您不应该存储Graphics对象以供日后使用.
相反,你应该e.GraphicsPaint处理程序中绘制.