C# 在自定义控件上绘制新对象之前,应该如何清除已绘制的所有内容?

C# 在自定义控件上绘制新对象之前,应该如何清除已绘制的所有内容?,c#,.net,windows,gdi+,gdi,C#,.net,Windows,Gdi+,Gdi,我已经在自定义控件上绘制了图像 但是,每当我在自定义控件中绘制另一个图像时,它就会覆盖或在其上绘制 我的解决方案不起作用: S1>我使用了调用绘制事件的this.Invalidate(),但它并不能解决问题,因为我已经有一些代码导致了同样的过度绘制问题 S2>使用图形类的清除方法解决了这个问题。 我正在使用此代码清除自定义控件中的所有内容 //in my custom controls paint method Graphics g = this.CreateGraphics();

我已经在自定义控件上绘制了图像

但是,每当我在自定义控件中绘制另一个图像时,它就会覆盖或在其上绘制

我的解决方案不起作用:

S1>我使用了调用绘制事件的this.Invalidate(),但它并不能解决问题,因为我已经有一些代码导致了同样的过度绘制问题

S2>使用图形类的清除方法解决了这个问题。 我正在使用此代码清除自定义控件中的所有内容

//in my custom controls paint method
    Graphics g = this.CreateGraphics();
    g.Clear(this.ForeColor);

但它闪烁了很多!这就是为什么我使用了双缓冲属性,现在它什么都没有显示

闪烁的问题现已解决。 实际上,问题在于我创建图形对象的方式。我使用以下代码创建图形对象:

Graphics g = this.CreateGraphics();
这不仅导致闪烁问题,而且
双缓冲
属性也不起作用

实际上,我们必须
使用Paint事件的e.Graphics
创建图形对象,然后进行绘制


因此,现在我的
DoubleBuffered
属性正在完成它的工作。

您不能使用
g.Clear(BackColor)
,因为它的父级为空吗?如果它没有帮助,您必须再次绘制相同的含铁材料。您的绘画方法是如何“绘制旧图像”的?我不太确定问题出在哪里。请不要在标题中添加
[已解决]
。如果你找到了自己的解决方案,把它作为答案贴出来,然后一天左右接受它。然后,系统会将问题显示为“已解决”。你也可能从答案中得到名声。他从这里得到: