1

次のテキストを含む RichTextbox があるとします。

エラー
警告
情報

そして、最後の単語の色を緑に変更したいとしましょう。
どうすればいいですか?一部のテキストの色を変更するコード(置換機能)がありますが、私が言いたいことを知っている場合は、最新の行のみを変更するだけです...

私はほとんど忘れていましたが、ここに単語の色を変更するために使用するコードがあります:

static void ReplaceText(RichTextBox box, string phrase, Color color)
    {
        box.HideSelection = true;
        int pos = box.SelectionStart;
        string s = box.Text;
        for (int ix = 0; ; )
        {
            int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase);
            if (jx < 0) break;
            box.SelectionStart = jx;
            box.SelectionLength = phrase.Length;
            box.SelectionColor = color;
            ix = jx + 1;
        }
        box.SelectionStart = pos;
        box.SelectionLength = 0;
    }

言い換えれば、最新の行のみを編集するにはどうすればよいですか? ありがとう!

編集:ところで!色はそこにとどまる必要があります。コンソール出力ウィンドウとしましょう。

4

2 に答える 2

4

これはあなたのために働くでしょう:

public void HighlightLastLine(RichTextBox TextControl, Color HighlightColor)
{
    TextControl.Text = TextControl.Text.Trim();
    TextControl.SelectionStart = 0;
    TextControl.SelectionLength = 0;
    TextControl.SelectionColor = Color.Black;
    string LastLineText = TextControl.Lines[richTextBox1.Lines.Count() - 1];
    int LastLineStartIndex = richTextBox1.Text.LastIndexOf(LastLineText);
    TextControl.SelectionStart = LastLineStartIndex;
    TextControl.SelectionLength = TextControl.Text.Length - 1;
    TextControl.SelectionColor = HighlightColor;
}

使用法:

HighlightLastLine(richTextBox1, Color.Indigo);

基本的に、ここで行っているのは、最初にクリーンアップを実行してから、Lines文字列配列を使用してコントロールの最後の行を選択することです。次に、その文字列の最後のインデックスを取得し(重複している場合)、行の最初から最後まで色付けを開始するようにコントロールに指示します。最後に、パラメータで渡された色を適用します。

編集:

カスタムテキストの強調表示を可能にし、ClearColorsパラメーターでfalseフラグが渡された場合にテキストをクリアしないオーバーロードを追加します。

  public void HighlightLastLine(RichTextBox TextControl, string TextToHighlight, Color HighlightColor, bool ClearColors = true)
    {
        TextControl.Text = TextControl.Text.Trim();
        if (ClearColors)
        {
            TextControl.SelectionStart = 0;
            TextControl.SelectionLength = 0;
            TextControl.SelectionColor = Color.Black;
        }
        int LastLineStartIndex = richTextBox1.Text.LastIndexOf(TextToHighlight);
        if (LastLineStartIndex >= 0)
        {
            TextControl.SelectionStart = LastLineStartIndex;
            TextControl.SelectionLength = TextControl.Text.Length - 1;
            TextControl.SelectionColor = HighlightColor;
            TextControl.SelectionStart = 0;
            TextControl.SelectionLength = 0;
        }
    }

使用法:

HighlightLastLine(richTextBox1, "Michael Jackson", Color.Indigo, false);

これは、マイケルジャクソンの最後のインデックスを見つけて、それを色付けしようとします。最後のパラメータにfalseが指定されていることに注意してください。これにより、既存の色を保持できます。

于 2012-08-12T02:53:55.473 に答える