Fat*_*510 104 c# string colors richtextbox winforms
我正在尝试为要附加到RichTextBox的字符串部分着色.我有一个由不同字符串构建的字符串.
string temp = "[" + DateTime.Now.ToShortTimeString() + "] " +
userid + " " + message + Environment.NewLine;
Run Code Online (Sandbox Code Playgroud)
这是消息构建后的样子.
[9:23 pm]网友:我在这里留言.
我希望括号内的所有内容[9:23]都是一种颜色,"用户"是另一种颜色,而消息是另一种颜色.然后我想将字符串附加到我的RichTextBox.
我怎么能做到这一点?
Nat*_*lch 230
这是一个AppendText
使用color参数重载方法的扩展方法:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这就是你如何使用它:
var userid = "USER0001";
var message = "Access denied";
var box = new RichTextBox
{
Dock = DockStyle.Fill,
Font = new Font("Courier New", 10)
};
box.AppendText("[" + DateTime.Now.ToShortTimeString() + "]", Color.Red);
box.AppendText(" ");
box.AppendText(userid, Color.Green);
box.AppendText(": ");
box.AppendText(message, Color.Blue);
box.AppendText(Environment.NewLine);
new Form {Controls = {box}}.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
请注意,如果您输出大量消息,可能会发现一些闪烁.有关如何减少RichTextBox闪烁的想法,请参阅此C#Corner文章.
小智 12
我用font作为参数扩展了方法:
public static void AppendText(this RichTextBox box, string text, Color color, Font font)
{
box.SelectionStart = box.TextLength;
box.SelectionLength = 0;
box.SelectionColor = color;
box.SelectionFont = font;
box.AppendText(text);
box.SelectionColor = box.ForeColor;
}
Run Code Online (Sandbox Code Playgroud)
这是我在代码中添加的修改版本(我使用的是.Net 4.5),但我认为它也适用于4.0.
public void AppendText(string text, Color color, bool addNewLine = false)
{
box.SuspendLayout();
box.SelectionColor = color;
box.AppendText(addNewLine
? $"{text}{Environment.NewLine}"
: text);
box.ScrollToCaret();
box.ResumeLayout();
}
Run Code Online (Sandbox Code Playgroud)
与原始的差异:
我认为在RichTextBox中修改“选定的文本”不是添加彩色文本的正确方法。所以这里是一种添加“色块”的方法:
Run run = new Run("This is my text");
run.Foreground = new SolidColorBrush(Colors.Red); // My Color
Paragraph paragraph = new Paragraph(run);
MyRichTextBlock.Document.Blocks.Add(paragraph);
Run Code Online (Sandbox Code Playgroud)
从MSDN:
Blocks属性是RichTextBox的content属性。它是段落元素的集合。每个段落元素中的内容可以包含以下元素:
排队
InlineUIContainer
跑
跨度
胆大
超连结
斜体
强调
越线
因此,我认为您必须根据零件颜色拆分字符串,并Run
根据需要创建尽可能多的对象。
归档时间: |
|
查看次数: |
146585 次 |
最近记录: |