社区
VB
帖子详情
vb.net画图撤销
muradil0903
2009-02-27 11:26:51
我想用vb.net在picturebox上画图以后实现图片的撤销功能。。。。怎么实现啊。比如说在picturebox上没规律的话几个矩形,正方形,圆,椭圆等。。。当然无规律画图的话,不知道对象的位置,颜色,第几个画上去等都不知道。然后按一下撤销,就删除最后一次画上去的图片。知道我的意思了吧。。。。就像是很多软件上有的“撤销”功能。。。。。谢谢。。。。写代码分就多。。。呵呵。。。谢谢。。。。。
...全文
584
4
打赏
收藏
vb.net画图撤销
我想用vb.net在picturebox上画图以后实现图片的撤销功能。。。。怎么实现啊。比如说在picturebox上没规律的话几个矩形,正方形,圆,椭圆等。。。当然无规律画图的话,不知道对象的位置,颜色,第几个画上去等都不知道。然后按一下撤销,就删除最后一次画上去的图片。知道我的意思了吧。。。。就像是很多软件上有的“撤销”功能。。。。。谢谢。。。。写代码分就多。。。呵呵。。。谢谢。。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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/
用
VB.NET
开发交互式CAD系统
用
VB.NET
开发交互式CAD系统,包括结合GDI+和OPENGL两种方案。 联系平台客服可开发票。
图形编辑器,
画图
程序, 绘制, 设计, 打印, 矢量图转换, VC++, VB, 源代码
图形编辑器,
画图
程序, 绘制, 设计, 打印, 矢量图转换, VC++, VB, 源代码 --全球领先, 100%采用高性能C++编写而成的企业级制图源码解决方案,100%源码开放! 使用E-Form++可视化图形组件库开发类似于Visio的流程图、矢量图编辑应用是从E-Form++诞生之日起就一直处于非常重要的地位,我...
python可视化界面自动生成,python如何做可视化界面
适用对象 适用于学习了TKinter并不想太麻烦写GUI代码,也不想用其他工具和框架 比如wxPython,PyQt4的同学。适用于界面不太复杂的小程序开发,界面复杂的还是适用wxPython等框架吧 pythonturtle绘制树。因为TKinter为Python标准库,使用TKinter完成的Python程序可以称为 “绿色软件”,不需要目标机器上安装wxPython,PyQt4等框架,只要有Python 的机器就能运行。如果软件逻辑不是很复杂,通常一个*.py搞定,不像其他框架,需要几个文件。
VB简易绘图板的实现
VB简易绘图板,实现鼠标画自由曲线、直线、矩形、椭圆、橡皮擦以及无规则异形颜色填充,还支持
撤销
与重做功能。 工程包下载地址:https://download.csdn.net/download/ty5858/85204629
WINDOWS核心编程笔记(16-21)
第16章线程的堆栈有时系统会在你自己进程的地址空间中保留一些区域。第3章讲过,对于进程和线程环境块来说,就会出现这种情况。另外,系统也可以在你自己进程的地址空间中为线程的堆栈保留一些区域。每当创建一个线程时,系统就会为线程的堆栈(每个线程有它自己的堆栈)保留一个堆栈空间区域,并将一些物理存储器提交给这个已保留的区域。按照默认设置,系统保留1MB的地址空间并提交两个页面的内存。但是,这些默认值是可以
VB
16,556
社区成员
110,528
社区内容
发帖
与我相关
我的任务
VB
VB技术相关讨论,主要为经典vb,即VB6.0
复制链接
扫一扫
分享
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章