我想使用不同的颜色为richtextbox的不同部分着色,与发布的here相同。
但有一点不同,在我的情况下,我需要使用richtextbox的插入方法在顶部插入消息。
我使用的是经典方法:
myRichTextBox.Text.Insert(0,myMessage);
但是使用它我无法对消息的不同部分进行着色,所以我已经完成了以下扩展方法:
public static class RichTextBoxExtensions
{
public static string Insert(this string str, int index, RichTextBox box, string text, Color color)
{
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
//box.Text = str.Insert(0, box, text, color);
box.Text = str.Insert(index, text);
box.SelectionColor = box.ForeColor;
return box.Text;
}
}
然后我通过以下方式从我的程序的任何一点调用它来使用它:
private void PrintMessage(RichTextBox box, string message, Color color)
{
box.Text = box.Text.Insert(0, box, message, color);
}
但它不起作用,它在扩展方法Insert in line:
中引发异常box.Text = str.Insert(0, box, text, color);
它说“堆栈溢出”。有什么想法吗?
已更新:
private void PrintMessage(RichTextBox box, string message, Color color)
{
box.SelectedText = box.SelectedText.Insert(0, box, message, color);
}
public static class RichTextBoxExtensions
{
public static string Insert(this string str, int index, RichTextBox box, string text, Color color)
{
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
box.SelectedText = str.Insert(index, text);
box.SelectionColor = box.ForeColor;
return box.Text;
}
}
但它不起作用,文字看起来没有颜色。
注意:
我需要在richtextbox控件的顶部添加文本,而不是在底部,所以我使用的是Insert而不是AppendText。
更新2 : 使用AppendText并将SelectionStart设置为0以将文本附加到richtextbox的顶部,如TaW所说here,在第一次将消息打印到richtextbox时失败。剩下的时间(不是第一次)没问题。
那么如何使它也适用于附加到richtextbox的第一个字符串?
public static void AppendText(this RichTextBox rtb, string text, Color color)
{
rtb.SelectionStart = 0; // set the cursor to the target position
rtb.SelectionLength = 0; // nothing selected, yet
rtb.SelectedText = text; // this inserts the new text
rtb.SelectionLength = text.Length; // now we prepare the new formatting
rtb.SelectionColor = color;
}
答案 0 :(得分:0)
要在顶部添加带有颜色变化的文本,我使用了这段代码,对我来说这是最好的解决方案。 它不使用复制/粘贴或文本删除和重写。
public void Log(RichTextBox myTextBox, string Testo, Color colore)
{
myTextBox.SelectionStart = 0;
myTextBox.SelectionLength = 0;
myTextBox.SelectionColor= colore;
myTextBox.SelectedText = Testo;
}
答案 1 :(得分:-1)
你写错了原型并且实现不对。我制作了一个有效的代码。您只需在表单中添加Richtextbox元素并将其命名为框。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public static class RichTextBoxExtensions
{
public static void AppendText(this RichTextBox box, string text, Color color)
{
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
box.AppendText(text);
box.SelectionColor = box.ForeColor;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
box.AppendText("[" + DateTime.Now.ToShortTimeString() + "]", Color.Red);
box.AppendText(" ");
box.AppendText("GREEN TEXT", Color.Green);
box.AppendText(": ");
box.AppendText("BLUE TEXT", Color.Blue);
box.AppendText(Environment.NewLine);
}
}
}
要在您的代码中调用它,请按照
进行操作private void PrintMessage(RichTextBox box, string message, Color color)
{
box.Text = box.AppendText(message, color);
}
代码来自Richtextbox prepend new text with color
UPDATE :: 要在Richtextbox上编写使用这个修改过的代码(我使用剪贴板做了一个脏修复),但它可以正常工作
public static void AppendTextToTop(this RichTextBox box, string text, Color color)
{
Clipboard.Clear();
box.SelectAll();
box.Copy();
box.Clear();
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
box.AppendText(text);
box.SelectionColor = box.ForeColor;
box.Paste();
}