加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何在.net Windows应用程序中实现“撤消”操作?

发布时间:2020-12-13 22:44:22 所属栏目:Windows 来源:网络整理
导读:假设一个赢取表单有一定的输入字段,用户输入/重新输入一些数据. 如何保留先前由“撤消”操作输入的数据? 只是想知道最好的方法来完成它. 有几个选择.重要的是您在项目初期开始设计.尝试将其添加到现有项目可能非常昂贵,如果不是考虑到这种能力的设计. 有一
假设一个赢取表单有一定的输入字段,用户输入/重新输入一些数据.

如何保留先前由“撤消”操作输入的数据?

只是想知道最好的方法来完成它.

有几个选择.重要的是您在项目初期开始设计.尝试将其添加到现有项目可能非常昂贵,如果不是考虑到这种能力的设计.

有一些基本的模式,你会想要利用:

> MVC或Observer模式.第一个关键不在于您的高级架构的宗教或模式 – 狂热者实施.重要的是您的软件可以识别其当前状态和显示状态之间的差异,并且适当地解耦.您的视觉状态和应用程序状态之间需要有一个共同的,明确界定的耦合.这为您提供了创建命令所需的常见架构(请参阅#2).
> Command模式.您可以使用命令模式获得大量的质量(尽管可能会以某些代码为代价看起来像向导生成).对命令模式采取的具体方法可能会有所不同(每个命令通过覆盖实现一个类,每个命令通过事件处理程序实现一个类,例如),但命令是@Ralph建议构造堆栈的“action”类周围.

这可能有点棘手,但是一般的方法是侦听将数据从视觉状态“提交”到应用程序状态的事件. Validated事件可能是一个很好的钩子文本框. Click事件对于Button来说更有意义.当该提交发生时,您将创建与该控件相关联的命令,尝试执行该命令,并且如果命令成功完成,则将该命令添加到undo堆栈.现在您正在跟踪正在发生的情况以及正在发生的数据.
> Memento模式. @JP拉出最后一块拼图.您可以在保存的命令上使用纪念品来存储执行命令之前受影响的控件的状态.这与您的命令界面上的UnExecute()成员相结合,应该是执行任务所需的最后一个核心设计.

关于这样一种结构化方法的好处是,您现在有一个自然的扩展点,需要在命令的基础上进行其他行为.例如,交易是自然契合的.在我目前的项目中,我正在使用WPF ICommand接口(在我的winforms项目中)提供有关给定命令CanExecute()在任何给定时间的反馈.这允许我以纯粹的命令驱动方式适当地启用和禁用UI小部件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读