北大青鸟网络电视精灵代码剖析
这篇文章的目的主要为了后续工作的使用,在这里对S2深入.NET平台和C#编程中贯穿案例《网络电视精灵》的部分实现代码进行思路剖析。
一、项目框架的搭建:
我们都知道开发一个项目之前,应该对项目的整体框架进行搭建。或者专业一点称为详细设计。解析来我们就来看下网络电视精灵的大致结构,当然后续的功能可能还需要加入其它类。
思路分析:
1.创建对应的类
TvProgram:节目类
该类主要负责定义节目的属性,为后续从xml文件中读取的内容提供存放位置。
ChannelBase:频道基类
TypeAChannel:A类频道
TypeBChannel:B类频道
ChannelFactory:工厂类
上述四个类主要控制频道信息
ChannelManager:频道管理类
该类主要作用实质上减轻窗体中的代码量。相当于程序的工具类。
2013年8月18日
任务;加载所有的频道信息,绑定到界面的TreeView上
核心思路:
1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel;
该方法作用读取FullChannels.xml文件,并且将读取到的内容赋值给ChannelBase 对象。关键的问题就转化成了如何创建一个ChannelBase对象。我们都知道ChannelBase本身是一个抽象类,无法创建实例。由此,我们想到可以通过其子类来创建对象。由于不同子类实例化需要多次new,我们单独写了一个工厂类(ChannelFafactory),来创建子类实例,但是该子类实例存储在父类变量中。赋值完成后,我们需要将频道对象添加到字典中。那么
LoadAllChannel方法结束后,字典中就有了XML文档中的数据。也就是我们实现了将
本地硬盘上的xml文件中的数据读取到了内存中的一个字典集合中。
2.将集合中的数据绑定到TreeView中
将字典集合中的数据通过Foreach拆解,每循环一项,都创建一个TreeNode对象。
并且将集合中的属性赋值给节点对应的属性。然后将拼接处的节点添加到TreeView上
。这里需要注意的是,如何找到TreeView控件中的【所有电视台】这个节点,因为
我们需要在该节点上添加频道名称。代码如下:
2013年8月21日
扩展:DGV绑定List<T>
List<T> list=new List<T>();
dgv.DataSource=new BindingList<T>(list);
任务:1.将频道节目单填充到DataGridView中
2.实现TreeView的右键菜单功能(能添加电台和删除电台)
3.右键菜单控制
核心思路:
将频道节目单填充到DataGridView中
1.在对应的频道子类中书写Fetch方法,解析对应的频道xml文件,然后将xml文件中的数据读取到 public List<TvProgram> TvList { get; set; }中。
2.将TvList中的数据绑定到DataGridView上
实现TreeView的右键菜单功能(能添加电台和删除电台)
核心思路:
1.添加电台
其实我们在做的事情就是先获取所有电台的某一个电台(北京电视台),然后通过
Tag属性拿到该电台对应的属性,将拆解出来的属性赋值给我的电台下的某一个
节点,由于节点不存在,所以我们要构造出一个节点。然后赋值,赋值完成后,我们就将构造出来的 节点添加到我的电台下就OK。
当然,上面的操作仅仅是界面上新增电台的一个假象。程序再次运行时,我们添加的电台并没有保存。所以我们要将选中的电台添加到我的电台(由于我喜欢的电台可能有多个,所以我们定义了一个集合。)集合中。因为我们大家都知道集合中的数据时存储在内存中的,所以我们要向程序下次运行时,显示出我们添加的电台,那么就必须将集合中的数据永久保存。当然我们知道,永久保存数据的方法有很多,在这里我们采取的是使用txt文件的方式,所以我们书写了一个方法来帮我们完成这项工作,sw.WriteLine(“End”)主要为了方便后面对文本文件的读取
归结起来有3点:
01.在TreeView中添加节点
02.向集合中添加节点
03.将集合中数据写入文本文件
删除电台思路与这个差不多!就不赘述了。
右键菜单控制
核心思路:通过Visible属性控制右键菜单的显示和隐藏