3

色付きのテキストに RichTextBox を使用しています。テキストのさまざまな部分にさまざまな色を使用したいとしましょう。これは今のところうまくいっています。

現在、RichTextBox の SelectionStart プロパティに問題があります。RichTextBox の Text プロパティにテキストを設定しました。テキストに\r\n\r\nSelectionStart Position が含まれている場合、文字の位置と割り当てられた文字列が一致しません。

小さな例 (WinformsApplication.RichTextBox を含むフォーム):

   public Form1()
    {
        InitializeComponent();
        String sentence1 = "This is the first sentence.";
        String sentence2 = "This is the second sentence";

        String text = sentence1 + "\r\n\r\n" + sentence2;
        int start1 = text.IndexOf(sentence1);
        int start2 = text.IndexOf(sentence2);

        this.richTextBox1.Text = text;

        String subString1 = text.Substring(start1, sentence1.Length);
        String subString2 = text.Substring(start2, sentence2.Length);

        bool match1 = (sentence1 == subString1); // true
        bool match2 = (sentence2 == subString2); // true

        this.richTextBox1.SelectionStart = start1;
        this.richTextBox1.SelectionLength = sentence1.Length;
        this.richTextBox1.SelectionColor = Color.Red;

        this.richTextBox1.SelectionStart = start2;
        this.richTextBox1.SelectionLength = sentence2.Length;
        this.richTextBox1.SelectionColor = Color.Blue;

    }

RichTextBox は次のようになります。
ここに画像の説明を入力

ご覧のとおり、2 番目の文の最初の 2 文字は色付けされていません。これは、 によって生成されたオフセットの結果です\r\n\r\n

これの理由は何ですか?テキストの色付けに別のコントロールを使用する必要がありますか? 信頼できる方法で問題を解決するにはどうすればよいですか? "\r\n\r\n"をString.Empty に置き換えてみましたが、他のオフセットの問題が発生します。

関連質問:
RichTextBox.Select と SubString メソッドの動作に一貫性がない

4

2 に答える 2

1

完全を期すために(今のところlinepoglsの回答に固執します):
SelectionStartプロパティのインデックスを取得する別の方法を見つけました。RichTextBox は、指定された文字列に基づいてインデックス位置を取得するために使用できるFindメソッドを提供します。

強調表示するテキストは一意ではなく、複数回出現する可能性があることに注意してください。オーバーロードを使用して、検索の開始位置を指定できます。

于 2013-10-10T10:52:20.467 に答える