这是我的代码。当我将光标移动到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();
}
}
答案 0 :(得分:5)
您需要使用双缓冲控件。
创建一个继承Control
并在构造函数中设置DoubleBuffered = true;
的类(这是受保护的属性)。
使用该控件代替面板,它不会有任何闪烁。
此外,您不应该存储Graphics
对象以供日后使用
相反,您应该在e.Graphics
处理程序中使用Paint
。
答案 1 :(得分:4)
如何覆盖面板用户控件并将Doublebuffered
设置为true?
public partial class BufferPanel : Panel
{
public BufferPanel()
{
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
UpdateStyles();
}
}