vb.net画图撤销

muradil0903 2009-02-27 11:26:51
我想用vb.net在picturebox上画图以后实现图片的撤销功能。。。。怎么实现啊。比如说在picturebox上没规律的话几个矩形,正方形,圆,椭圆等。。。当然无规律画图的话,不知道对象的位置,颜色,第几个画上去等都不知道。然后按一下撤销,就删除最后一次画上去的图片。知道我的意思了吧。。。。就像是很多软件上有的“撤销”功能。。。。。谢谢。。。。写代码分就多。。。呵呵。。。谢谢。。。。。
...全文
584 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
w136712058 2009-04-25
  • 打赏
  • 举报
回复
你可以考虑一下用泛型记录之前的图形坐标,在OnPaint函数里做处理撤销
下面是一个简单的c#例子,你可以看一下,说不定有什么启发


//定义泛型记录绘制的图形
List<Rectangle > pListRec =new List <Rectangle >();
//绘制保存的图形
private void panelDraw_Paint(object sender, PaintEventArgs e)
{
//这里就可以简单的控制泛型来实现你的要求
foreach (Rectangle rec in pListRec)
{
using (Graphics formGraphics = Graphics.FromImage(panelDraw.BackgroundImage))
{
using (Pen newpen = new Pen(colColor, 1))
{
formGraphics.DrawRectangle(newpen, rec);
}
}
}
}
//鼠标弹起,绘图标记置假,记录新图
private void panelDraw_MouseUp(object sender, MouseEventArgs e)
{
boolStart = false;
//Pstart和Pend是定义的一个全局变量
int newstartX = System.Math.Min(Pstart.X, Pend.X);
int newstartY = System.Math.Min(Pstart.Y, Pend.Y);
int newwidth = System.Math.Abs(Pstart.X - Pend.X);
int newheight = System.Math.Abs(Pstart.Y - Pend.Y);

Rectangle mRect = new Rectangle(newstartX, newstartY, newwidth, newheight);

pListRec.Add(mRect);

panelDraw.Invalidate();
panelDraw.Update();
}
wuyq11 2009-04-15
  • 打赏
  • 举报
回复
画图时记录操作记录,撤销时回滚操作,删除图片
清晨曦月 元老 2009-04-15
  • 打赏
  • 举报
回复
思路是这样滴,模仿一下画图吧。
建立一个表DIM B AS NEW ARRAYLIST就行了,每当:
MOUSEUP时:
1、将当前图像添加:B.ADD(BITMAP)
2、记录当前位置INDEX+=1
当撤销时……INDEX-=1 调用你的绘图函数----GR.DRAWIMAGE(B(INDEX))恢复当前操作的BMP为B(INDEX)……最好IF 一下INDEX是否=-1 了
当重复时……INDEX+=1 调用你的绘图函数----GR.DRAWIMAGE(B(INDEX))恢复当前操作的BMP为B(INDEX)……最好IF 一下INDEX是否=B.COUNT了

有一个问题,就是这样做,实际上是添加了对当前图像的一个引用到表,使得这个图像不会被回收掉,于是……当你N次MOUSEUP时……占用的那个内存啊,我K,解决办法倒是不少,可以创建临时文件存储到磁盘,也可以……限制撤销次数……自己想吧
宝_爸 2009-02-28
  • 打赏
  • 举报
回复
好像没啥简单的方法。
使用Command模式应该是个方法。

看看下面的帖子是不是能帮你。
http://social.msdn.microsoft.com/Forums/en-US/Vsexpressvcs/thread/9f33b8b6-e659-44e5-95ce-4f7ef1d62c8d/

16,556

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧