WinForm ListView 控件修改 ListViewItem.ListViewSubItem 的样式

C# .NET WinForm ListView 显示详细列表时单独修改每个子数据项的颜色等样式

发布用户:小梦

2023/04/17 14:26


在 .NET WinForm 中有个 ListView 控件,通过设置其 View 属性值为 Details 能够实现像资源管理器中浏览文件详细信息列表那样的效果(类似行列数据表格),这个组件中的每条数据都是 ListViewItem 类型,类型中还可包含 ListViewItem.ListViewSubItem 子类型;可以理解为 ListViewItem 作为主数据类型,在 Details 显示模式中排在第一列,而其子数据项依次排在之后的列。

子数据类型与主数据类型一样,都含有 ForeColorBackColor 属性,也就是说应该是可以修改子数据类型颜色的,但是在实际情况下直接使用子数据类型的这些属性来修改样式却是无效的,比如:

ListViewItem listViewItem = new ListViewItem();
listViewItem.SubItems.Add("子项文本", Color.DarkRed, Color.White, DefaultFont);

这是因为主数据项中有个 UseItemStyleForSubItems 属性,这个属性决定了子数据项是否采用主数据项的样式,如果这个属性值为 true,那么子数据项的样式就被主数据项的样式给覆盖了,所以就没有效果,只需把这个属性值设为 false 就能够看到效果了:

ListViewItem listViewItem = new ListViewItem();
listViewItem.UseItemStyleForSubItems = false;
listViewItem.SubItems.Add("子项文本", Color.DarkRed, Color.White, DefaultFont);

效果示例

注:很遗憾这些数据行不能直接更改行高,字体大小也不能够自适应行高;但可通过指定 ListView 控件的 SmallImageList 属性项给 ImageList 设置宽高,这样数据行就能够被 Image 给撑大,不过 Image 会显示在最左边,且宽度不能为 0,也就是说如果你尝试用此方法撑高一点行高,那么最左侧会始终留有 1px 的宽度距离。

相关环境:.NET Framework 4.5、Windows 窗体应用



代码写多了,脑力不够用了,请我喝杯咖啡提提神 ☕

警告!禁止网络诈骗、非法集资、非法套现等法律外的缘由转账汇款,你的赞赏转账请考虑再三后支付,此收款不作任何形式的退款。





金额:

* 支付宝支付后如果没有自动返回请手动返回此页并刷新。



* 在线内容服务不支持任何形式的退款/退费操作;支付后的订单记录可以在“用户主页 - 用户订单中心”查看。

此网站可能不完全兼容您目前的浏览器!
此页随时可能被替换下线,请不要依赖此页功能!
此页正在维护更新,可能会出现错误或卡顿。
通知 & 公告

暂时还没有消息