问题标签 [undo-redo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4535 浏览

c# - 在 WPF/C# 中撤消重做已经可以运行的应用程序

我已经对如何实现这个问题的标题进行了一些研究。我正在开发的应用程序已经开发了几年左右(虽然进展缓慢,你们都知道它在现实世界中的情况)。现在我需要加入 Undo/Redo 多级功能。现在说“你应该在开始之前考虑过这个”有点晚了......好吧,我们确实考虑过 - 我们对此没有采取任何行动,现在它就在这里。通过搜索 SO(和外部链接),我可以看到两种最常见的方法似乎是......

命令模式

纪念品图案

命令模式看起来会做很多工作,我只能想象它也会在这个过程中抛出数千个错误,所以我不太喜欢那个。

Memento 模式实际上很像我对此的想法。我在想如果有什么方法可以快速拍摄当前内存中的对象模型的快照,那么我就可以将它存储在某个地方(也许也在内存中,也许在文件中)。这似乎是一个好主意,我能看到的唯一问题是它如何与我们已经编写的内容集成。您会看到我们的应用程序,它在一个大面板(可能有数百个)中绘制图像,然后允许用户通过 UI 或通过自定义构建的属性网格来操作它们。整个应用程序与一个大的观察者模式相连。第二个任何变化,事件被触发,所有需要更新的东西都会发生。这很好,但我不禁想到,如果用户在属性网格上的 texfield 中输入文本,在 UI 赶上之前会有一点延迟(似乎每次用户按下一个键,都会添加一个新快照到撤消列表)。所以我对你的问题是......

  • 您是否知道可能有效的 Memento 模式的任何好的替代方案。
  • 您认为 Memento 模式是否适合这里,或者它会使应用程序变慢太多。
  • 如果备忘录模式是要走的路,那么制作对象模型快照的最有效方法是什么(我正在考虑将其序列化或其他方式)
  • 快照应该存储在内存中还是可以将它们放入文件中?

如果你已经走到这一步,谢谢你的阅读。您的任何输入都将是有价值的,非常感谢。

0 投票
5 回答
5853 浏览

winforms - c# 在windows窗体应用程序中撤消

我想知道在 C# 中开发撤消的简单方法是什么

我有一个 Windows 表单应用程序,在窗口中我有一个带有很多文本框、选择框、复选框的表单...

用户填写并点击计算按钮后,程序根据所有输入计算并返回一个值到屏幕。

我搜索了一种简单的方法来保存每次计算后的状态,并让用户能够返回一个或多个步骤。

谢谢

0 投票
1 回答
1993 浏览

iphone - 撤消管理器有什么用?如何使用它?

iphone中撤消管理器的需求是什么?我从来没有在示例程序中看到过这样的按钮。我知道撤消和重做的含义和用途。但我的问题是,为了什么目的,我需要它?如何在我的应用程序中使用它?如果您知道,还建议一个很好的示例代码链接...

谢谢

0 投票
3 回答
4970 浏览

python - 如何使用 Python/Django 实现“撤消”功能

我有一个 Django 应用程序,允许用户在其中导入包含联系人数据(会员编号、名字、姓氏等)的 CSV 文件。

当他们导入文件时,应用程序会检查数据库中的匹配记录,然后:1) 如果不存在匹配项,则插入新记录,或 2) 使用新数据更新现有数据。

我的问题是:使用 Django 或直接 Python 实现撤消功能的最佳方法是什么,以便用户可以撤消导入操作并将条记录恢复到原始状态?

我最初的想法是创建一个这样的表(伪代码):

然后,如果用户单击“撤消”,我可以查找与他们的交易关联的 unique_id,并将受该交易影响的每条记录设置为 old_value。

我想知道是否有一种我想念的更简单的方法来做到这一点,或者是否有人有类似的经验。

0 投票
2 回答
583 浏览

php - php/ajax 用户操作撤消管理器

是否存在一个库,可为您提供具有 Web 应用程序历史记录的撤消/重做功能?一个想法是一个 php/javascript/ajax 系统,您可以在其中为每个用户操作注册一个相反的操作和变量状态(就像一个普通的撤消管理器!)。它应该在客户端级别和服务器级别都有效。

我问太多了吗?

0 投票
1 回答
977 浏览

android - 将撤销重做功能添加到 FingerPaint 应用程序(google 的示例应用程序之一)

我想修改 FingerPaint 应用程序并为其添加撤消和重做功能。它基本上在 onDraw 方法中将路径绘制到画布上,并且也将相同的路径绘制到位图上。无论如何,我的第一个想法是将位图保存为文件,但可能有一些更有效的方法。我正在等待建议。

0 投票
1 回答
1110 浏览

flash - ActionScript - 通用撤消/重做 API?

我一直没有成功地尝试创建我自己的撤消/重做类,这些类与任何类型的可能的撤消和重做命令都可以很好地工作。

例如,我的简单类与撤消/重做显示对象的 x 和 y 位置或撤消/重做滑块的值等完美配合,但是当我尝试定制我的类以同时处理诸如添加和删除之类的事情时,事情变得很冒险项目到一个列表。

是否有任何众所周知且有据可查的解决方案用于一般撤消和重做动作脚本(没有 Flex)?

0 投票
1 回答
431 浏览

undo - 撤消-重做重复的命令

所以,我知道撤消/重做通常是通过命令模式实现的。但是,当一个命令要重复x次时,撤消x次对用户来说会很麻烦。

例如,我有一个“int num”,当我在键盘上按“+”时,程序会执行“++num”。如果用户通过按“+”将num从0增加到50,那么用户想要撤消,我如何允许用户撤消一次,并且num会回到0。

如何实现撤消,使其可以处理一系列重复的命令?

提前致谢!

0 投票
3 回答
4519 浏览

android - 如何撤消/重做最后一次触摸动作

我有一个正在处理的图像,我有两个按钮,撤消和重做。如果单击这两个按钮中的任何一个,我需要代码来撤消/重做先前的触摸操作。我知道我必须使用堆栈。我应该如何实施?

0 投票
1 回答
614 浏览

winforms - MVP Supervising Controller, Data Bindings and Undo/Redo

My application is a MDI Winform application. I encounter some problems connected with MVP pattern and Data Bindings.

All my forms are modeless. When I modify a field, or change the selected item in a combobox, I want to modify the model and I want all the form (s) to synchronize immediately with the model. Databinding allow this perfectly for simple fields ,and for complex operations , I use the Presenter to update view "manually" .

But, How to put Undo/redo mechanisms in the picture ? I mean: I want to revert change I made in a text field by clicking an "undo" button.

I try to apply command pattern, but it seems there is no place to introduce a "command" mechanism in the databinding mechanism. I'm so stuck with this , that I now take under consideration to abandon Binding mechanisms completely.

I see so many articles about Binding, but no solution to undo/redo is really exposed.

Are undo/redo and databinding really uncompatible?