吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1342|回复: 3
收起左侧

[求助] C#ListView控件的使用

[复制链接]
遗憾迟香 发表于 2020-3-27 15:52
学过面向对象,也学过winform程序设计,但二者结合在一起并不简单
我在开发音乐下载器时,为每个来源的音乐都创建了一个类,比如Netease,QQ,Kuwo,Kugou等,它们都继承着名为Song的抽象类
我想要在listview中显示的信息有:
string类型的曲名,艺术家以及Quality类型的音质(public enum Quality { 无损, 高品, 标准 })
不需要显示的信息有:
public abstract string SQ { get; set; }//无损地址
        public abstract string HQ { get; set; }//高品
        public abstract string SD { get; set; }//标准
        public abstract string Url { get; set; }//试听地址
抽象方法有:
/// <summary>
        /// 下载
        /// </summary>
        /// <param name="path">目录</param>
        /// <param name="q">音质</param>
public abstract void Download(string path, Quality q);
效果如图所示
TIM截图20200327153131.png
listbox可以添加任何数据类型,只需重写ToString即可显示
TIM截图20200327155107.png
但listview不行
TIM截图20200327154102.png
TIM截图20200327154122.png
请问如何将自定义类的实例转换为ListViewItem对象并且可以像数组集合一样管理歌曲(比如双击试听或下载)?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

dpblue 发表于 2020-3-27 16:17
顶起来,学习一下
gana 发表于 2020-3-27 21:06
WinForm 的ListView确实不太好用。建议你在ListView的基础上封装自定义一个自定义控件,也不用太复杂,把你的功能实现了就行了。

或者,别用WinForm,用Wpf。看你的编码风格,很不错了,面向对象用的挺好,Wpf的数据绑定机制,正适合你的这种编程方式:业务逻辑放在各个类里完成,界面只用来绑定数据。Wpf界面漂亮而且只要你的业务清晰,类关系处理的好,用起来可比winform省心多了。
TanXin 发表于 2020-3-28 03:14
如果一定要用 ListView 的话,我的做法可能是这样的:

添加并显示
1. new 一个 ListViewItem,根据 Song 对象的信息,把相应的字符串存入 SubItems,作为界面显示的内容;
2. 关键点,直接把你的 Song 对象实例存入这个 ListViewItem 的 Tag 属性中,作为该条目的数据供后续管理使用;
3. 把这个 ListViewItem 通过 ListView 的 Add 方法添加至界面上。

响应事件(例如双击试听):
1. 编写 ListView 的 DoubleClick 事件处理,通过 ListView 的 FocusedItem 属性找到当前条目;
2. 读取 ListViewItem 的 Tag 属性,通过类型转换(object->Song),得到之前存入的 Song 实例(含有试听地址相关信息),调用其他控件播放音频即可。

这算是解决问题的一个抛砖引玉的思路吧,写得乱,希望能看懂~
优点是不需要另外维护什么数组集合,可以一对一绑定在 ListView 内部的条目集合中,不过这确实比较粗糙……

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 19:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表