细胞de理想

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

实现代码:

public partial class ui_log : ListBox
    {
        public ui_log()
        {
            InitializeComponent();

            this.DrawMode = DrawMode.OwnerDrawFixed;
            this.BackColor = Color.Black;
            this.Font = new Font("黑体", 12);
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }

        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            base.OnDrawItem(e);

            if (e.Index >= 0 && this.Items.Count>0)
            {
                dynamic item = this.Items[e.Index];
                Brush brush = new SolidBrush(item.Color);
                e.Graphics.DrawString(item.Text, e.Font, brush, e.Bounds, StringFormat.GenericDefault);
            }
        }

        public  void Log(string text, Color color)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new Action(() => { Log(text, color); }));
                return;
            }
            this.Items.Add(new { Color = color, Text = text });
            this.SelectedIndex = this.Items.Count - 1;
        }
        public void LogInfo(string text)
        {
            Log(text, Color.Green);
        }
        public void LogError(string text)
        {
            Log(text, Color.Red);
        }
        public void LogWarinig(string text)
        {
            Log(text, Color.Yellow);
        }

        public void ClearLog()
        {
            this.Items.Clear();
        }
    }

  

 private void button1_Click(object sender, EventArgs e)
        {
            ui_log1.LogInfo("Info");
            Thread.Sleep(300);
            ui_log1.LogError("Error");
            Thread.Sleep(300);
            ui_log1.LogWarinig("Warinig");
            Thread.Sleep(300);
            ui_log1.Log("White", Color.White);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ui_log1.ClearLog();
        }

  

代码解析:首先是写了一个自定义控件,继承自ListBox;然后设置下DrawMode属性,这个很重要,否则不会触发DrawItem;最后在DrawItem事件中,对数据进行重绘。

做完上述处理后,就不要直接使用Items.Add了,需要对Items.Add也进行一次封装,将颜色也传进去,即:this.Items.Add(new { Color = color, Text = text });

使用方法:

如果将以下自定义控件放到控件库中(即在新建项目的时候选择Windows窗体控件库),在其他程序中使用起来就很方便了,只要将这个dll拖到工具箱面板中,就可以在工具箱中看到这个控件。使用的时候直接从工具箱中拖出来就可以了。

posted on 2022-11-14 10:34  细胞的理想  阅读(76)  评论(0编辑  收藏  举报