我在面板中使用过图形。在程序开始时,我在面板上画一些点,然后我想画连接这些点的线。问题是,当我按下选项卡按钮时,创建的图形会消失(但这种情况在程序中发生过一次)。下一个问题是我想清除面板我使用了以下代码来清除面板:
Panel1.Invalidate();
但这只会清除线条,而不会清除最初创建的点。有没有人有一个简单的解决方案,因为我不想重新创建面板。
技术细节:为了在面板中绘制初始点,使用panel1
的油漆事件:
Graphics gfx = e.CreateGraphics()
对于行,有一个seprate函数在点击按钮时调用,我在其中使用了:
Graphics gfx = Panel1.CreateGraphics();
另一个用于清除面板的按钮有以下代码:
Panel1.invalidate();
但它只清除线条图形,而不是那些初始点。
我犯了一个错误,在panel1的绘制事件中创建了初始点。所以每次我打电话给
Panel1.Invalidate();
它回忆起绘制事件,这些点被重新绘制,而不是被清除。
是否将点保存在某种集合中并在Paint
事件中绘制?
然后应该清空集合,然后调用Invalidate
面板在绘制事件内重新绘制。这意味着您必须在该方法中绘制所有内容,而不是直接访问图形上下文。
这解释了为什么每次重新绘制控件时,使用Graphics gfx = Panel1.CreateGraphics();
绘制的所有内容都会丢失,因为在绘制事件期间,您只绘制初始点,而不是其他点。