【问题标题】:How to clear panel's graphics in c#?如何在 C# 中清除面板的图形?
【发布时间】:2012-07-08 02:33:16
【问题描述】:

我在面板中使用了图形。在程序开始时,我在面板中绘制了一些点,之后我想绘制连接这些点的线。问题是当我按下选项卡按钮时,创建的图形会消失(但这在程序中会发生一次)。下一个问题是我想清除我使用以下代码清除面板的面板:

Panel1.Invalidate();

但这只会清除线条,但不会清除最初创建的那些点。有没有人有一个简单的解决方案,因为我不想重新创建面板。

技术细节:在面板中绘制初始点,使用panel1的绘制事件:

Graphics gfx = e.CreateGraphics()

对于线条,有一个单独的函数在按钮点击时被调用,我使用了这个函数:

Graphics gfx = Panel1.CreateGraphics();

另一个用于清除面板的按钮代码如下:

Panel1.invalidate();

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

【问题讨论】:

  • 如果直接使用 Panel.CreateGraphics() 在 Panel 上绘图,则无法轻松清理。您是否考虑过使用 Panel.Paint() 事件?
  • 我在 panel1 的绘制事件中绘制点并使用 Graphics gfx = e.CreateGraphics()。对于线条我用户图形 gfx = Panel1.CreateGraphics();并清除面板我使用 Panel1.invalidate();但它只清除线条图形而不是点。

标签: c# graphics panel


【解决方案1】:

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

Panel1.Invalidate();

它会回忆起绘画事件,并且这些点被重绘而不是清除。

【讨论】:

    【解决方案2】:

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

    那么你应该清空集合然后调用Invalidate

    【讨论】:

    • 我在 panel1 的绘制事件中绘制点并使用 Graphics gfx = e.CreateGraphics()。对于线条我用户图形 gfx = Panel1.CreateGraphics();并清除面板我使用 Panel1.invalidate();但它只清除线条图形而不是点。
    • 我在数据表中有这些点,然后从那里读取 xy 轴。但它与绘画事件无关。
    【解决方案3】:

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

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

    【讨论】:

    • 你的意思是我应该使用 Graphics gfx = Panel1.CreateGraphics();并且不应该使用 Graphics gfx = e.CreateGraphics()
    • 不,恰恰相反。您必须在绘制事件期间同时绘制点和线。
    • 不,我不能这样做,我已经通过制作一个与面板颜色相同的矩形暂时解决了这个问题。
    • 正如我所说,您必须在绘画事件中绘制所有内容。如果由于某种原因你不能这样做,那就不要画线。
    • 好吧,我找到了问题,抱歉我无法理解您所说的,您可能是对的,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 2012-05-13
    • 2012-05-17
    • 2012-10-09
    • 2013-05-15
    • 2013-01-14
    • 2019-05-11
    相关资源
    最近更新 更多