Winform打印后台线程运行时消息,习惯用ListBox,有时候某行消息过长,设置个Tooltip控件提示全部信息。后来无意中看到同事使用RichTextBox打印消息,然后在不同的消息类别上加以不同的颜色做区分,倒也不失为一种办法,自己觉得这样还不错,于是找了资料,然后做成例子,特意分享一下。

  常用的消息类别:正常信息、警告信息、错误信息。具体效果见下文。

资源下载

  示例代码下载

  厌倦了ListBox打印消息,使用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);
        }
    }
RichtextboxExt

相关文章:

  • 2022-02-22
  • 2021-11-27
  • 2021-04-19
  • 2021-08-26
  • 2021-10-06
  • 2021-05-21
  • 2021-10-17
  • 2021-08-26
猜你喜欢
  • 2021-08-11
  • 2022-12-23
  • 2021-08-16
  • 2022-12-23
  • 2021-09-08
  • 2021-08-05
  • 2022-12-23
相关资源
相似解决方案