QA@IT

C#でRichTextBoxのTextの変更点を取得したい

2893 PV

はじめてお目にかかります。

C#のRichTextBoxにて、
Textが変更された際に、追加あるいは削除を受け取り、
どの文字列が変更されたかを取得したいのです。

具体的には、オリジナルのアンドゥ動作を作りたく、
TextChangedにて変更されたテキストや変更方法、文字位置を取得、
順次Undoクラスに追加するというイメージです。

テキストエディタは変更が局所的なので、
diffを全体にかけるような大規模なことはする必要がないと踏み、
全体を毎回保存するとメモリ消費が激しいため、
変更点だけを取得するようにしたいのです。

仕上がっているコードはこんな感じです。

undoHis history_undo;//文字の変更を格納
bool undo = false;//Undoの動作状態を格納

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    if(!undo)
    {//Undoが行われていないとき

        //このへんで変更された部分を受け取る

        //history_undoに追加

    }
    else undo = false; //Undoが行われたので戻す
}

public class undoHis
{
    string changeText = null; //変更された部分を格納
    int[] changePoint = new int[2]; //変更された部分の位置の開始、終了点を格納
    modifineAction ma = null; //どのように変更したかを格納
}

public enum modifineAction
{
    insert,delete
}
ウォッチ

この質問への回答やコメントをメールでお知らせします。