• 北大青鸟网络电视精灵代码剖析


    这篇文章的目的主要为了后续工作的使用,在这里对S2深入.NET平台和C#编程中贯穿案例《网络电视精灵》的部分实现代码进行思路剖析。

      一、项目框架的搭建:

       我们都知道开发一个项目之前,应该对项目的整体框架进行搭建。或者专业一点称为详细设计。解析来我们就来看下网络电视精灵的大致结构,当然后续的功能可能还需要加入其它类。

     思路分析: 

    1.创建对应的类

     

    TvProgram:节目类

     

    该类主要负责定义节目的属性,为后续从xml文件中读取的内容提供存放位置。

     

    ChannelBase:频道基类

     

    TypeAChannelA类频道

    TypeBChannelB类频道

     

    ChannelFactory:工厂类

     

     

     

    上述四个类主要控制频道信息

     

    ChannelManager:频道管理类

     

    该类主要作用实质上减轻窗体中的代码量。相当于程序的工具类。

     

    2013818

     

    任务;加载所有的频道信息,绑定到界面的TreeView

     

    核心思路:

     

        1.首先在频道管理类ChannelManager中写一个加载所有频道方法LoadAllChannel;

     

           该方法作用读取FullChannels.xml文件,并且将读取到的内容赋值给ChannelBase          对象。关键的问题就转化成了如何创建一个ChannelBase对象。我们都知道ChannelBase本身是一个抽象类,无法创建实例。由此,我们想到可以通过其子类来创建对象。由于不同子类实例化需要多次new,我们单独写了一个工厂类(ChannelFafactory),来创建子类实例,但是该子类实例存储在父类变量中。赋值完成后,我们需要将频道对象添加到字典中。那么

     

    LoadAllChannel方法结束后,字典中就有了XML文档中的数据。也就是我们实现了将

     

    本地硬盘上的xml文件中的数据读取到了内存中的一个字典集合中。

     

    2.将集合中的数据绑定到TreeView

    将字典集合中的数据通过Foreach拆解,每循环一项,都创建一个TreeNode对象。

    并且将集合中的属性赋值给节点对应的属性。然后将拼接处的节点添加到TreeView

    。这里需要注意的是,如何找到TreeView控件中的【所有电视台】这个节点,因为

    我们需要在该节点上添加频道名称。代码如下:

    2013821

    扩展: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属性控制右键菜单的显示和隐藏

     

     

     

     

  • 相关阅读:
    Redis使用:聚合类型为空时,会自动被Redis删除
    Effective C++: 04设计与声明
    select引起的服务端程序崩溃问题
    Effective C++: 03资源管理
    Effective C++: 02构造、析构、赋值运算
    Effective C++: 01让自己习惯C++
    Centos7.2 安装配置 Tengine(nginx)
    Centos7更新阿里yum源
    Go中函数作为值、类型传递。
    go实现冒泡排序和快速排序
  • 原文地址:https://www.cnblogs.com/weilengdeyu/p/3272865.html
Copyright © 2020-2023  润新知