在C#中如何重绘listview和toolbar的外观

要实现ListView的各行各列重绘是一件很麻烦的事情,最近就确定要实现一个功能需求,在一个ListView各行的第二列(Details模式)加入一个小图标。之前已经领教过ListView的设置,要开启重绘ListView各行,就必须重载它的OnDrawSubItem,但是ListView默认是不会执行你重载的OnDrawSubItem事件的,除非你把它OwnerDraw设置为true,即打开由用户控制绘图模式。然而让人抓狂的是,OwnerDraw=true后,整个ListView的Item/SubItem/Column全部都会空掉,即使你同时重载OnDrawSubItem/OnDrawItem/OnDrawColumnHeader并执行里面的base.OnDrawXXXXX(e),也不给你画出来。
网站上寻找了若干资料,还请教了猫猫,基本拿到的案例都是老老实实完整重绘各行;还有一个比较特别的案例,是使用发送消息方式给ListView发送LVM_SETITEM消息,让SubItem显示图标和文字,然而奇怪的是,案例提供的编译好的EXE可以实现这个功能,但通过源代码编译后却图标出不来,又经过一番资料搜索后,才知道.Net 1.x下可以实现,反而.Net 2.x下无法实现该效果(....M$是白痴么?)最终不得不放弃这个方案。
其实我只需要在ListView各行原内容的基础上添加东西而已,用不着正行重绘那么劳师动众啊,于是还是硬着头皮回去看重载事件,忽然发现了重载的事件OnDrawSubItem/OnDrawItem/OnDrawColumnHeader的参数中,都有e.DrawDefault这个东东,而且默认是e.DrawDef

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值