This is my code. When I move cursor over Form it works, circle is moving but it is blinking. How can I fix this?
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();
}
}
You need to draw on a double-buffered control.
Make a class that inherits Control
and sets DoubleBuffered = true;
in the constructor (this is a protected property).
Use that control instead of your panel it there won't be any flickering.
Also, you should not store a Graphics
object for later.
Instead, you should draw on e.Graphics
in the Paint
handler.
How bout overriding a panel user control and set Doublebuffered
to true?
public partial class BufferPanel : Panel
{
public BufferPanel()
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
}
}
来源:https://stackoverflow.com/questions/4777135/how-can-i-draw-on-panel-so-it-does-not-blink