2009-06-26 4 views
2

.NET 2.0ではSystem.Windows.Forms.RichTextBoxコントロールを使用していますが、C#を使用しています。System.Windows.Forms.RichTextBoxに parではなく lineを追加する方法

私はRichTextBoxに追加したい文字列の配列を持っていますが、RTFに新しい段落を作成したくありません。 RTF内の\ parコマンドではなく、\ lineコマンドで行を分割したい。

\ parコマンドの代わりに\ lineコマンドを生成するためにRichTextBox.AppendTextを正常に取得することができませんでした。だから私は自分のテキストを挿入し、手動で\ lineコマンドをRTF自体に挿入しています。

RTFに挿入された元の文字列を見つけることができないため、文字列の1つにRTFでエスケープされた文字が含まれているとエラーになります(たとえば、単一のclosequoteが\ rquoteに変換されます)。

このソリューションでは、RTFで検索する前に、行の文字をエスケープする必要があります。

RichTextBoxコントロールで\ parコマンドを生成する方法ではなく、\ parコマンドを生成する方法がありますか、この解決策に固執してRTFエスケープ文字列を検索する必要があります。

string[] lines = textInfo.Lines; 

for (int i = 0; i < lines.Length; i++) 
{ 
    rtb.AppendText(lines[i]); 

    if (i < lines.Length - 1) 
    { 
     string rtf = rtb.Rtf; 

     int insertedIndex = rtf.LastIndexOf(lines[i]); 

     int length = lines[i].Length; 

     rtf = rtf.Insert(insertedIndex + length, @"\line"); 

     rtb.Rtf = rtf; 
    } 
} 

答えて

1

あなたがそれらのいずれかを変更すると、RichTextBoxコントロールが自動的にテキストおよびRTFプロパティを更新します。ここでは

は私の現在のコードです。 Textプロパティに追加されたテキストは自動的にRTFプロパティに更新されます。

RichTextBoxコントロールは、\ parを任意の改行に自動的に挿入します(Enter、コントロールのshift-enter、\ r \ n \ r \ n TextプロパティのApp.TextプロパティのEnvironment.NewLine )関数を使用します)。あなたの問題としてあなたが報告しているものは何ですか。

コントロールがRTFをどのように生成するかを変更する方法はないと思います。私はテキストを追加して、RichTextBoxコントロールがエスケープする必要のある文字の変換を処理し、すべての\ parを\ lineに置き換えます。 TextInfoを想定し

は、テキストボックスで、次の行1

rtb.Text += textInfo.Text; 

rtb.Rtf = rtb.Rtf.Replace(@"\par", @"\line"); 

編集中=のために+ =を交換しない場合は、いくつかの既存のRTF(の終わりに、その内容を追加したい:あなたので

あなたの文書に行ごとに行を追加し、\ r \ nのために\ parを生成することを知っているなら、あなたは壊したくなる行にいくつかのユニークなテキストを後置することができます(REPLNを使っています) \ lineで置き換えます。もちろん、置き換えたい行を特定することができなければなりません。 REPLN \ parを\ lineに置き換えることができます。私が好きだったほどエレガントではありませんが、それは仕事を完了します。

foreach (string line in textInfo.Lines) 
{ 
    //assuming your condition is that the string contains the substring, "substring" 
    rtb.AppendText(line + (line.Contains("substring") ? "REPLN\r\n" : "\r\n")); 
} 

rtb.Rtf = richTextBox1.Rtf.Replace(@"REPLN\par", @"\line"); 
+0

これも私の発見でした。すべての\ parインスタンスをRTF内の\ lineインスタンスに置き換えたくないので、何か良いものが見つからない限り、私のソリューションを使い続ける必要があります。 – jameswelle

+0

あなたが正しいと思う、それはあなたの文書の段落を殺すでしょう。 RichTextBoxコントロールが改行を行う方法を選択的に変更する方法が見つからない限り、それはハックタイムです!答えを編集する... – Luis

関連する問題