-1

RichTextBox を作成し、次のコードを追加します。

private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        //( )
        int selectionStart = richTextBox1.SelectionStart;
        string helpText = richTextBox1.Text;
        int closerPos;

        for (int i = 0; i < helpText.Length; i++)
        {
            if (helpText[i] == '(')
            {
                selectionStart = richTextBox1.SelectionStart;
                closerPos = helpText.Substring(i).IndexOf(')') + i;

                helpText = helpText.Substring(i + 1, closerPos - i - 1);
                richTextBox1.Text = richTextBox1.Text.Remove(i + 1, closerPos - i - 1);


                richTextBox1.Select(i + 1, 0);
                richTextBox1.SelectionColor = Color.Red;
                richTextBox1.SelectedText = helpText;
                richTextBox1.SelectionColor = Color.Black;


                helpText = richTextBox1.Text;
                richTextBox1.SelectionStart = selectionStart;
            }
        }
    }

このコードは ( ) の間のテキストに色を付ける必要があります。例えば:

「こんにちは(色が必要です)テキスト(sdadsasd)」

( ) 内のテキストは赤で色付けする必要があります。ただし、最後のテキストのみが色付けされています。どうすれば修正できますか?

4

3 に答える 3

0

その if 条件では、最初の括弧しか得られません。

のようにテキストを分割してみてくださいhelpText.Split('(');

次に、それを繰り返してロジックを実行します。

于 2013-03-27T22:48:46.167 に答える
0

バイトごとに移動せずにこれを達成できると思います。IndexOf メソッドを使用してそれを行うことができます。

これは私が考えていたものです:

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
    string rbText = richTextBox1.Text;

    int position = 0;
    int startBrace = rbText.IndexOf('(', position) + 1;

    while (startBrace != -1)
    {
        position = rbText.IndexOf(')', startBrace);

        if (position != -1)
        {
             richTextBox1.Select(startBrace, position - startBrace);
             richTextBox1.SelectionColor = Color.Red;

             startBrace = rbText.IndexOf('(', position) + 1;
        }
        else
             break;
    }
}

このコードを完全にテストしていないことに注意してください。

于 2013-03-27T23:24:03.590 に答える
0

私はすでに潜在的な問題を見ています.helpTextが単一変数文字列のみの場合に配列として使用されています. helpText 全体を char 配列に分解してから、それを繰り返し処理して括弧を見つけてみてください。

于 2013-03-28T00:30:56.427 に答える