C#で何か作る日記

C#初学者が何かを作るその過程を備忘録として書いていく日記。同じようなことで悩んでいる1人、2人の役に立てたら嬉しいな。プログラムの他にたまに3Dモデルも作ったり作らなかったり。

RedoUndoを初めて実装

何かアプリを作るとき、大体実装されてるよなーと思う機能の一つにUndo,Redoがあるけど今まで実装したことがないのでC#の勉強を兼ねて実装。

このサイトをパク…参考にした。
http://zecl.hatenablog.com/entry/20091002/p1zecl.hatenablog.com

ふむふむCommandパターンとMementoパターンを使うのね。なるほどなるほど(初めて見た)。

この例だとmementoに前や後の状態を全て保持していないといけないっぽい。
テキストくらいならそれでも大丈夫っぽいけどペイントソフトとかだとメモリを食い過ぎる気がする。

その場合は状態を持つんじゃなくて、何をしたら前、後の状態に遷移するかを持たせればいいのかな?
例えば、何らかのオブジェクトを移動させるとして・・・

CommandManagerは
move(x, y){
   ...
}

みたいな動作(関数)を受け取ってPictureBoxとかに命令を送る。
同時にUndoのスタックに

move(-x, -y){
   ...
}

みたいに逆の動作を保存しておく。
こうすればメモリを少し節約できるかも。

よし、近いうちに試してみよう。
次はPictureBoxを使ってみるよ。