C#-存储由graphicsObject绘制的对象

C#-存储由graphicsObject绘制的对象,c#,graphics,drawing,C#,Graphics,Drawing,我正在使用System.Drawing.Graphics Graphics sobj在System.Windows.Forms.Panel上绘制对象。存储旧图形信息的明智方法是什么?在MouseMove事件期间删除最后一个图形的步骤 我必须记住笔的设置和线吗 谢谢:) //编辑。我想我的问题不清楚。我有一个小组。我把它当作绘画的容器 我可以画多条线,圆,矩形 每次我按下鼠标(MouseDown),我都想开始画新对象。当我移动鼠标(MouseMove)时,当前绘制的对象必须更改(例如,线条,如绘画

我正在使用
System.Drawing.Graphics Graphics sobj
System.Windows.Forms.Panel
上绘制对象。存储旧图形信息的明智方法是什么?在MouseMove事件期间删除最后一个图形的步骤

我必须记住笔的设置和线吗

谢谢:)

//编辑。我想我的问题不清楚。我有一个小组。我把它当作绘画的容器

我可以画多条线,圆,矩形

每次我按下鼠标(MouseDown),我都想开始画新对象。当我移动鼠标(MouseMove)时,当前绘制的对象必须更改(例如,线条,如绘画中的线条)。当我释放鼠标(MouseUp)时,我希望我绘制的对象变成常量

现在,我尝试调用
graphicsObj.Clear()方法,但它会清除所有已绘制的对象


所以我推断,我必须存储关于旧抽屉对象的信息。现在,我必须制作列表(向量等等)并存储关于这些对象的信息?或者有一种方法可以避免它?

您应该处理
面板
绘制事件中的所有绘制,这正是它的作用所在

Paint
事件在其
PaintEventArgs
中为您提供了应该使用的
Graphics
对象。这将确保每次刷新时都会绘制您的说明,而不是仅绘制一次

如果您是从
面板
派生,请替代
OnPaint
方法

原问题展开后编辑:

您应该将存储数据的逻辑与显示数据的逻辑分开。
图形
对象的目的是显示现有数据,而不是存储数据

我认为最好的解决办法是列出你正在绘制的对象或其他对象的集合。
您还需要使用标志来处理“活动”对象的所有逻辑,等等。

我认为您可以将最后的x,y存储到点对象数组中作为历史。

我不确定您在这里想要什么,但如果您想要一些关于绘制内容的内存。
绘制一组位图,然后让绘制例程将其中一个位图绘制到控件上。

我更新了我的queston(更好的解释)。我不知道这是否是我所需要的。好吧,我明白:)在onPaint方法中,通过对象迭代并绘制,在鼠标事件中,只需将对象添加到列表并请求重新绘制。请求重新绘制的方法是使用
Invalidate()
,或更直接的
Refresh()
。您应该阅读这两种方法及其重载。我对此进行了更好的解释,如果您有时间和意愿,可以再看一次:)