9

私のアプリケーションでは、ユーザーに小さな元に戻す機能を提供したいと考えています。ユーザーが元に戻すことができるアクションは多くありません。特にアクションは次のとおりです。

  • オブジェクトにメモを追加する
  • オブジェクトに色を付ける
  • 文字列でオブジェクトにタグを付ける

今、私はこれを実装する方法を考えました。最初に考えたのは、ユーザーが実行できる 3 つの異なるアクションの抽象基本クラスであるアクション クラスです。ユーザーがこれらのアクションを実行するたびに、この抽象 Action クラスのサブクラスの新しい適切なインスタンスが作成され、すべてのアクションを含むリストに挿入されます。

ユーザーが何かを元に戻したいときはいつでも、リストがユーザーに表示され、ユーザーは元に戻すアクションを選択できます。

今、私はそのようなアクションオブジェクトに何を格納する必要があるかを考えていました:

  • アクション前のオブジェクトの状態
  • 実行された実際のアクション (例: オブジェクトのメモに追加された文字列)

これで十分かどうかはわかりません。時系列順のようなものも考えましたが、リストを時系列的に正しく維持できるので、これは必要なはずです。

他に考慮すべきことはありますか?

4

5 に答える 5

17

元に戻す/やり直しは、通常、コマンド パターンで実装されます。クラスはこれActionの基礎として使用できますが、各コマンド内で「実行」アクションと「元に戻す」アクションが必要です。 これが実際の例です。実装がはるかに簡単になり、ユーザーが従うのがはるかに簡単になるため、実行されたコマンドをスタックに保存する必要があります。

于 2010-12-13T18:11:42.023 に答える
9

次のような簡単なことを行うことができます。

Stack<Action> undoStack = new Stack<Action>();    

void ChangeColor(Color color)
{
    var original = this.Object.Color;
    undoStack.Push(() => this.Object.Color = original);
    this.Object.Color = color;
}
于 2010-12-13T18:08:46.557 に答える
5

元に戻したいすべてのアクションに対してコマンド パターンを実装する必要があります。

プログラムを大幅に変更せずに元に戻す/やり直し操作を実装する方法

于 2010-12-13T18:10:12.620 に答える
2

UNDO機能の正確で実証済みの実装はコマンドパターンです

于 2010-12-13T18:08:34.030 に答える
0

元に戻す/やり直し機能を既存のプロジェクトに追加する場合、このSimple-Undo-redo-library-for-Csharp-NET を見落とすことは困難です。

于 2013-05-17T01:50:45.627 に答える