[開発環境] OS:Windows XP Professional IDE:Visual Studio 2008 Express Edition今、簡単なテキストエディタを作っています。エディタ部分にTextBoxコントロールを使用しているのですが、TextBoxには1回のアンドゥ・リドゥしか出来ません。なので、独自に実装し、TextChangedイベントでテキストを取得し、履歴(List(Of String))に追加して、アンドゥ、リドゥ処理時に履歴を参照し表示するようにしました。しかし、これだと1000文字のテキストを編集すると、毎回約1000文字ずつ履歴に追加されることになり、メモリを使いすぎると思い、違う方法を探しています。何かよい方法はないでしょうか。よろしくお願いいたします。
> 何かよい方法はないでしょうか。> よろしくお願いいたします。>位置、文字列1、文字列2、操作(追加/削除/置換....)のメンバーを持つクラスを作成して履歴として保存するようにしたらどうでしょう。メンバーは操作によって増減しますが...(置換が必要ないなら文字列2がいらないとか。)例1.345を削除時前:123456789 → 後:126789位置:2、文字列1:345、操作:削除
GOD さん、回答ありがとうございます。> 位置、文字列1、文字列2、操作(追加/削除/置換....)のメンバーを持つクラスを作成して> 履歴として保存するようにしたらどうでしょう。なるほど。そのアイディアは思いつきませんでした。がんばって実装して見ます。ありがとうございました。
> がんばって実装して見ます。実装を試みましたが、入力や切り取り、貼り付けなどをした後の変更部分の取得方法が分かりません。TextChangedイベントだとどこが変更されたかどうかを取得できないので困っています。どなたかよろしくお願いします。
> > がんばって実装して見ます。> > 実装を試みましたが、入力や切り取り、貼り付けなどをした後の> 変更部分の取得方法が分かりません。> TextChangedイベントだとどこが変更されたかどうかを取得できないので> 困っています。> KeyPressイベントとかでキー取得できないかな。コピペ関連はClipboardクラスを調べてみて。使いそうなのはCtrl+C, Ctrl+V, Ctrl+X, Shift+Ins, Shift+Delくらいかな?
> しかし、これだと1000文字のテキストを編集すると、毎回約1000文字ずつ> 履歴に追加されることになり、メモリを使いすぎると思い、> 違う方法を探しています。現状は、どの位メモリを消費し、それをどの程度までに抑えたいと思っておられるのでしょうか?Changedイベント や キー入力の度に複雑な判断処理をすれば、動作が重くなる可能性がありますが、メモリの方が優先しますか?Windows95 や 98 のような OS で使用するなら別ですが、XP 以降ならそれほどメモリを気にする必要もないかと思いますが(それとも何か問題がでているとか)私なら、多くのソフトのように、元に戻す等の動作の履歴の回数に制限を設けます。テキストエディタの目的にもよりますが、通常20回以上の前の動作まで元に戻すような事はされないかと思うので、VBのIDEのように最新の履歴を20回分まで保存するように制限すれば、文字列変数を20個使用するのと同程度のメモリ使用になると思うのですが。今回の条件に合致するかどうかは、知りませんが、変わった方法としては、この掲示板でも話題になった、投稿No.3810 投稿No.5911 のような方法もあります。※ 上記の過去ログは、下記のソフトでご覧になれます。 VB6.0及びVB.NET用掲示板の過去のログ及び閲覧ソフト(検索キー [元に戻す]) http://hanatyan.sakura.ne.jp/freesoft/vb60logview.htm
> > しかし、これだと1000文字のテキストを編集すると、毎回約1000文字ずつ> > 履歴に追加されることになり、メモリを使いすぎると思い、> > 違う方法を探しています。> > 現状は、どの位メモリを消費し、それをどの程度までに抑えたいと思って> おられるのでしょうか?> sender.Textをそのまま保存していたんじゃないでしょうか。それだとメモリ消費量は「(編集中のファイルの大きさ+α)×操作回数」になってしまうのでお勧めできません。囲炉裏さんの例は1000文字となっていますが、これが1GBとかのファイルだったら...
>>花ちゃんさん> 私なら、多くのソフトのように、元に戻す等の動作の履歴の回数に制限を設けます。> テキストエディタの目的にもよりますが、通常20回以上の前の動作まで元に戻すような> 事はされないかと思うので、VBのIDEのように最新の履歴を20回分まで保存するように> 制限すれば、文字列変数を20個使用するのと同程度のメモリ使用になると思うのですが。>>GODさん> sender.Textをそのまま保存していたんじゃないでしょうか。> それだとメモリ消費量は「(編集中のファイルの大きさ+α)×操作回数」になってしまう> のでお勧めできません。> 囲炉裏さんの例は1000文字となっていますが、これが1GBとかのファイルだったら...花ちゃんさん、GODさん、貴重なご意見ありがとうございます。花ちゃんさんの言うとおり、回数制限を作るというのも良いですね。確かに、テキストファイルはそんなに元に戻すを繰り返すときもないですね(^_^;)でも、GODさんのいうとおり、文字数が多ければ多いほど重くなってしまうと思います。ですので、GODさんの意見を参考にしようと思います。