web-dev-qa-db-ja.com

リッチテキストボックスでテキストをフォーマットする

次のようにリッチテキストボックスのテキストをフォーマットするにはどうすればよいですか

2/11/2010-05:15 PM --Adam: 11月2日に追加された別のテストノート

2/11/2010-05:14 PM --Z_kas:テストノート。ステージが変更されました:NEnq-見積もりを送信

2/11/2010-05:12 PM --user32: 11月2日に追加された別のテストノート

ありがとう

8
Kashif

他の人が述べているように、以前の質問と重複する可能性があります。ただし、以下のコードスニペットをご覧ください。書式を変更するために追加するテキストの長さを取得する必要はありません。追加する前に書式を設定するだけです。これは(私が思うに)テキストボックスにたくさんのテキストがある場合にパフォーマンスが向上します。

これは、ユーザーによるテキストボックスの選択がない限り機能します。そうすると、説明できない奇妙なことが起こります。おそらく他の誰かが私たちを啓発することができますか? WinForms RichTextBox内のテキストの色を変更する で提案されたソリューションでも同じ問題が発生します。コードサンプルをDateTimeのものでより簡単に機能させるために、ユーザー名の後にある「:」を置き換えました。これは「Split」で簡単に変更できます。

       private void AddText(string text)
    {
        string[] str = text.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);

        if (str.Length == 2)
        {
            richTextBox1.DeselectAll();
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Bold);
            richTextBox1.AppendText(Environment.NewLine + str[0] + ";");
            richTextBox1.SelectionFont = new Font(richTextBox1.SelectionFont, FontStyle.Regular);
            richTextBox1.AppendText(str[1]);
        } // Else?? Well, do something else..
    }

そして、呼び出し:

        private void button1_Click(object sender, EventArgs e)
    {
        AddText(DateTime.Now.ToString() + " - Mike; Did something");

    }
21
Mikael

別の方法は、rtf形式を使用することです。

richTextBox1.Rtf = @"{\rtf1\pc \b 02/11/2010 - 05:15 PM - Adam:\b0 Another test notes added on 2nd November \par \b 02/11/2010 - 05:14 PM - Z_kas:\b0 Test Notes. STAGE CHANGED TO: N Enq - Send Quote\par \b 02/11/2010 - 05:12 PM - user32:\b0 Another test notes added on 2nd November";

msdnを参照してください: http://msdn.Microsoft.com/en-us/library/aa287595%28v=vs.71%29.aspxhttp://msdn.Microsoft.com /en-us/library/aa140301.aspx#rtfspec_8

「\ b」はテキストの太字部分を開始し、「\ b0」はそれを終了します。 「\ par」は新しい段落/行を開始します(\ nに最も近い)。

13
amalgamate