日志篇一、C#实现item自定义颜色的ListBox,显示日志

一、说明
 

ListBox自身的OnDrawItem函数是专门绘制item样式的,只需要重载即可

 

protected override void OnDrawItem(DrawItemEventArgs e)
        {
            e.DrawBackground();
            e.DrawFocusRectangle();
            // 确保listbox中有日志且该日志被记录在字典中
            if (e.Index >= 0 && m_dicItems.Keys.Contains(e.Index))
            {
                e.Graphics.DrawString(m_dicItems[e.Index].info, Font, new SolidBrush(m_dicItems[e.Index].color), e.Bounds);
            }
        }


注意,listBox一定要设置成

 

 

this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;


二、那么就开始实现,添加一个组件继承自ListBox

1.先定义一个结构,用于保存item的index、info和color

 

 

class LogItem
    {
        public String info;
        public int index;
        public Color color;
    }


2.再定义一个字典,用于保存已经插入的item

 

 

Dictionary<int, LogItem> m_dicItems = new Dictionary<int, LogItem>();


3.拓展一下,日志可以无限制的添加,但是我们可以控制显示的最大条数

 

 

private int m_nMaxLength = 1000;
        [CategoryAttribute("自定义")]
        [DescriptionAttribute("日志最大显示条数")]
        public int MaxLength
        {
            set
            {
                m_nMaxLength = value;
            }
            get
            {
                return m_nMaxLength;
            }
        }


4.实现两个公共接口

 

 

public void AddLog(String log, Color color)
public void Clear()


AddLog

创建LogItem并将其添加到m_dicItems中,key就是Add的返回值,即Item在listbox中的位置

Clear

调用ListBox的Clear,同时调用m_dicItem.Clear

5.在实现一个内部的方法,当日志数达到上限时的处理方法
ModefyItems,这个方法的目的就是为了,确保ui显示的内容和m_dicItem中保存的保持一致,那样OnDrawItem才会保证不会绘制有问题
大致思路是,listBox删除0索引的项,m_dicItem中的key不变,value从n+1移到n上,再删除最后一个就ok拉

6.展示一下效果图

 

7.通过上面的步骤,应该都能实现效果了。demo程序及源码下载地址(为懒人而备)

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

血虐丘比特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值