C# 如何在c语言中清除面板的图形?

C# 如何在c语言中清除面板的图形?,c#,graphics,panel,C#,Graphics,Panel,我在面板中使用了grahics。在程序开始时,我在面板上画一些点,然后我想画连接这些点的线。问题是,当我按下tab按钮时,创建的图形消失,但在程序中只发生一次。下一个问题是我想清除面板,我使用了以下代码来清除面板: Panel1.Invalidate(); 但这只会清除线,而不会清除最初创建的点。是否有人有简单的解决方案,因为我不想重新创建面板 技术细节:为了在面板中绘制初始点,使用面板1的油漆事件: 对于行,有一个seprate函数,在单击按钮时调用,我使用了该函数: Graphics gf

我在面板中使用了grahics。在程序开始时,我在面板上画一些点,然后我想画连接这些点的线。问题是,当我按下tab按钮时,创建的图形消失,但在程序中只发生一次。下一个问题是我想清除面板,我使用了以下代码来清除面板:

Panel1.Invalidate();
但这只会清除线,而不会清除最初创建的点。是否有人有简单的解决方案,因为我不想重新创建面板

技术细节:为了在面板中绘制初始点,使用面板1的油漆事件:

对于行,有一个seprate函数,在单击按钮时调用,我使用了该函数:

Graphics gfx = Panel1.CreateGraphics();
另一个用于清除面板的按钮有以下代码:

Panel1.invalidate();

但是它只清除线条图形,而不是那些初始点。

是否将这些点保存在某种集合中,并在绘制事件中绘制它们


然后应该清空集合,然后调用Invalidate

是否将点保存在某种集合中,并在绘制事件中绘制它们


然后您应该清空集合,然后调用Invalidate

,面板将在paint事件中重新绘制。这意味着您必须在此方法中绘制所有内容,而不是直接访问图形上下文


这解释了为什么使用Graphics gfx=Panel1.CreateGraphics时绘制的所有内容;每次重新绘制控件时都会丢失,因为在绘制事件期间,您仅绘制初始点,仅此而已。

面板将在绘制事件内重新绘制。这意味着您必须在此方法中绘制所有内容,而不是直接访问图形上下文


这解释了为什么使用Graphics gfx=Panel1.CreateGraphics时绘制的所有内容;每次重新绘制控件时都会丢失,因为在绘制事件期间,您仅绘制初始点,仅此而已。

我在panel1的绘制事件中创建初始点是一个错误。所以每次我打电话

Panel1.Invalidate();

它回忆起绘制事件,这些点被重新绘制且未清除。

我在panel1的绘制事件中创建了初始点,这是一个错误。所以每次我打电话

Panel1.Invalidate();

它会调用绘制事件,这些点会被重新绘制且不会清除。

如果使用Panel.CreateGraphics直接在面板上绘制,则无法轻松清理。你是否考虑过使用面板?绘制事件?我在Panel1的绘制事件中绘制点,并使用图形GFX=E.CeaDeCGoice。对于第i行,用户图形gfx=Panel1.CreateGraphics;若要清除面板,请使用Panel1.invalidate;但它只清除线条图形,而不是点。如果使用Panel.CreateGraphics直接在面板上绘制,则无法轻松清理。你是否考虑过使用面板?绘制事件?我在Panel1的绘制事件中绘制点,并使用图形GFX=E.CeaDeCGoice。对于第i行,用户图形gfx=Panel1.CreateGraphics;若要清除面板,请使用Panel1.invalidate;但它只清除线条图形而不是点。我在panel1的paint事件中绘制点,并使用graphics gfx=e.CreateGraphics。对于第i行,用户图形gfx=Panel1.CreateGraphics;若要清除面板,请使用Panel1.invalidate;但它只清除线条图形而不是点。我在数据表中有这些点,从那里读取xy轴。但它与绘制事件无关。我在panel1的绘制事件中绘制点,并使用Graphics gfx=e.CreateGraphics。对于第i行,用户图形gfx=Panel1.CreateGraphics;若要清除面板,请使用Panel1.invalidate;但它只清除线条图形而不是点。我在数据表中有这些点,从那里读取xy轴。但这与绘画事件无关。你的意思是我应该使用Graphics gfx=Panel1.CreateGraphics;不应该使用图形gfx=e.CreateGraphicsNo,恰恰相反。在绘画活动中,你必须同时绘制点和线。不,我不能这样做,我已经临时解决了这个问题,制作了一个与面板颜色相同的矩形。正如我所说,你必须在绘画活动中绘制所有内容。如果你因为某种原因不能做到这一点,那么就不要划清界限。我发现了问题,很抱歉我无法理解你说的话,你可能是对的,谢谢你的帮助。你的意思是我应该使用Graphics gfx=Panel1.CreateGraphics;不应该使用图形gfx=e.CreateGraphicsNo,恰恰相反。在绘画活动中,你必须同时绘制点和线。不,我不能这样做,我已经临时解决了这个问题,制作了一个与面板颜色相同的矩形。正如我所说,你必须在绘画活动中绘制所有内容。如果你因为某种原因不能做到这一点,那就不要划定界限。我发现了问题所在,很抱歉,我无法理解你说的话,你可能是对的,谢谢你的帮助。