Winform打印后台线程运行时消息,习惯用ListBox,有时候某行消息过长,设置个Tooltip控件提示全部信息。后来无意中看到同事使用RichTextBox打印消息,然后在不同的消息类别上加以不同的颜色做区分,倒也不失为一种办法,自己觉得这样还不错,于是找了资料,然后做成例子,特意分享一下。
常用的消息类别:正常信息、警告信息、错误信息。具体效果见下文。
资源下载
实现
主要打印有颜色消息的方法如下:
public static void AppendMsg(this RichTextBox richTextBox1, Color color, string text) { richTextBox1.BeginInvoke(new ThreadStart(() => { lock (richTextBox1) { //为控件输入焦点 richTextBox1.Focus(); //检查文本框过长 if (richTextBox1.TextLength > 10000) { richTextBox1.Clear(); } //得到有格式的文本 using (var temp = new RichTextBox()) { temp.SelectionColor = color; if (AutoTime) temp.AppendText(DateTime.Now.ToString("HH:mm:ss ")); temp.AppendText(text); //追加文本 richTextBox1.Select(richTextBox1.Rtf.Length, 0); richTextBox1.SelectedRtf = temp.Rtf; } //设定光标所在位置 //richTextBox1.SelectionStart = richTextBox1.TextLength; //滚动到当前光标处 //richTextBox1.ScrollToCaret(); } })); }
封装了Info,Warn,Error等方法。
public static partial class ExtendMethod { //控制是否在打印消息时自动添加时间 public static bool AutoTime = true; public static void AppendMsg(this RichTextBox richTextBox1, Color color, string text) { richTextBox1.BeginInvoke(new ThreadStart(() => { lock (richTextBox1) { //为控件输入焦点 richTextBox1.Focus(); //检查文本框过长 if (richTextBox1.TextLength > 10000) { richTextBox1.Clear(); } //得到有格式的文本 using (var temp = new RichTextBox()) { temp.SelectionColor = color; if (AutoTime) temp.AppendText(DateTime.Now.ToString("HH:mm:ss ")); temp.AppendText(text); //追加文本 richTextBox1.Select(richTextBox1.Rtf.Length, 0); richTextBox1.SelectedRtf = temp.Rtf; } //设定光标所在位置 //richTextBox1.SelectionStart = richTextBox1.TextLength; //滚动到当前光标处 //richTextBox1.ScrollToCaret(); } })); } public static void Error(this RichTextBox richTextBox1, string text) { richTextBox1.AppendMsg(Color.Red, text); } public static void Warn(this RichTextBox richTextBox1, string text) { richTextBox1.AppendMsg(Color.Violet, text); } public static void Info(this RichTextBox richTextBox1, string text) { richTextBox1.AppendMsg(Color.Green, text); } }