0

System.Drawing.Graphics graphicsObj用于在System.Windows.Forms.Panel. 存储有关旧图纸的信息的明智方法是什么?在 MouseMove 事件期间删​​除最后一次绘图?

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

谢谢 :)

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

我可以画多条线、圆、矩形。

每次我按下鼠标(MouseDown)时,我都想开始绘制新对象。当我移动鼠标(MouseMove)时,当前绘制的对象必须改变(例如线条,就像在油漆中一样)。当我释放鼠标(MouseUp)时,我希望我绘制的对象变得恒定。

现在,我尝试graphicsObj.Clear();在 MouseMove 事件上调用方法,但它清除了所有绘制的对象。

所以我推断,我必须存储有关旧绘制对象的信息。现在,我必须制作列表(向量左右)并存储有关该对象的信息?或者有什么方法可以避免?

4

3 回答 3

1

Panel您应该在'事件中处理所有绘画Paint,这正是它的用途。

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

如果您是从 派生的Panel,请改写该OnPaint方法。

在扩展原始问题后进行编辑:

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

我认为制作List你正在绘制的对象的 s 或其他集合是最好的解决方案。您还需要标志来处理“活动”对象等的所有逻辑。

于 2012-11-26T18:12:47.010 回答
0

我认为您可以将最后一个 x,y 作为历史记录存储到 Points 对象数组中。

于 2012-11-26T18:13:48.797 回答
0

不确定我在这里得到你想要的东西,但如果你想要一些关于油漆画的记忆。绘制到一组位图,然后让您的绘制例程将其中一个位图绘制到控件上。

于 2012-11-26T18:16:11.920 回答