C# 窗口编辑后如何检测是否需要保存

 

问题:编辑器中有两处可以保存用户当前的操作:1)点击保存按钮;2)关闭窗口时,提示用户是否需要保存。原来的做法是根据Undo栈中是否有内容来判断是否需要保存内容,但是如果先点击保存按钮,用户没有其它动作,再关闭窗口时依然根据Undo栈进行判断就会重复保存(因为点击保存按钮不会清空Undo栈)。

解决方法1:如果编辑内容数据结构比较简单,可以在打开编辑窗口时创建两份编辑内容数据,一份(简称A)用于编辑,另一份作为原始数据(简称B)用于与A比较。如果如果窗口关闭时,如果A与B相同,则认为用户没有进行操作,或者用户操作后的结果与最初打开编辑窗口时的内容相同,如果A与B不同,则弹出窗口提示用于进行保存。当用户先点击保存按钮时,如果保存成功,则将A的内容更新到B中,这样就可以解决问题。不过这种方式实现起来很麻烦。

解决方法2)定义一个int类型的计数器counter,打开编辑窗口时将counter设置为0,如果有用户操作需要保存到undo中时,将counter加1,如果有undo操作,将counter减1。当关闭窗口时,如果counter不等于0,则认为编辑内容已经改变,需要提示用户是否保存。当用户先点击保存按钮时,如果保存成功,则将counter的值重新置为0。

解决方法3)定义一个int类型的值holder用于记录undo栈中的操作数量,打开编辑窗口时将holder设置为0。当关闭窗口时,如果holder不等于undo栈中的操作数量,则认为编辑内容已经改变,需要提示用户是否保存。当用户先点击保存按钮时,将holder值设置为undo栈中的操作数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值