GDI+绘图保存问题 c#

在一个form里面画出N个图形(圆,正方形等),点击保存按纽(到一个文件或其它方式),当下次运行这个form时,点击一个读取按纽(从一个文件或其它方式),就可以把保存的图... 在一个form里面画出N个图形(圆,正方形等),点击保存按纽(到一个文件或其它方式),当下次运行这个form时,点击一个读取按纽(从一个文件或其它方式),就可以把保存的图形读取出来。
这个想法,怎么实现?
展开
 我来答
HAL9000PLUS
2009-06-20 · TA获得超过1279个赞
知道小有建树答主
回答量:663
采纳率:0%
帮助的人:717万
展开全部
这个很容易的。可以采用“文档-视图”的观念设计。
你把form里的图形用一个个的对象表示,在绘制时,根据UI的操作,生成这些对象,保存一个集合里就好了。
这些对象和对象池要声明为可序列化的,这样就不必自己去写序列代码了。
在保存时,调用集合对象的序列化函数,即可以保存。在打开时,调用集合类的反序列化函数,从文件创建那些对象。

最后,为form的paint事件实现订阅,固定循环你的对象池的对象,根据对象的属性来画图就好了。

我大概写个示意的代码和类设计,有打字错误请包涵:

// 图形对象基类
[serialize]
public abstract class sharp
{
public Point StartPoint{set;get;}
public abstract void Draw(Graphics g);
}

public class circle : sharp
{
public double R;
public override void Draw(Graphics g )
{
// 这里写绘制自己的代码
}
}

//对象集合管理类
[serialize]
public class shapcollection
{
public List<sharp> sharps = new List<Sharp>();
}

// form 类
public class My_Form:Form
{
....
private ShapCollection MySharps = new ShapCollection();

// 比如这里你的保存菜单被点了。
mnSaveSharpToFile_Clicked()
{
// 请在网上找一下对象序列化和反序列化的代码吧,很多很多的。
// 找到后,在这里对 this.MySharps序列化就行了。
}

// 比如这里你的打开菜单被点了
mnLoadSharpFromFile_Click()
{

// 请在网上找一下对象序列化和反序列化的代码吧,很多很多的。
// 找到后,在这里对 this.MySharps反序列化就行了。
}

Form_Paint(object sender , PaintAgruemnt e)
{
foreach(var sharp in this.MySharps.shaps)
{
sharp.Draw(e.graphics);
}
}

Form_mouseDown() // 还有mouse up 事件等处理
{
// 如果UI上的操作导致了一个图形的建立,就在这里创建这个图形的对象,加入对象列表
Circle c = new Circle();
c.???? = ?????;
.... ....
this.MySharps.Sharps.Add(c);
this.Invalidate();
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式