zoukankan      html  css  js  c++  java
  • 网络电视精灵

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

    一.项目框架的搭建:

     

    这个界面需要的控件MenuStrip、TreeView、TabControl、ListView、DataGridView。

    思路分析:

    1.创建对应的类

     

    TvProgram:节目类

     

     //节目单的类
      public   class TvProgram
        {
          //节目播出的时间
            public DateTime  PlayTime { get; set; }
          //时段
            public String  Meridiem { get; set; }
          //节目的名称
            public string  ProgramName { get; set; }
          //视频的路径
            public string  Path { get; set; }
        }
    

     

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

    ChannelBase:频道基类

     //频道类
      public  abstract class ChannelBase
        {
          //定义3个属性和一个方法
          //节目的类型
            public String  Type { get; set; }
          //名字
            public string  ChannelName { get; set; }
          //存放的路径
            public string  Path { get; set; }
          //提供一个用于保存该节目的所有集合
            public List<TvProgram> TvList { get; set; }
          //解析path对应的频道xml文件形成内存中的泛型
            public abstract void Fetch();
        }
    

      

    TypeAChannelA类频道

     

     public  class TypeAChannel:ChannelBase
        {
            public override void Fetch()
            {
                //解析xml文件将xml文件转换到lvlist中
                if (TvList==null)
                {
                    TvList = new List<TvProgram>();
                }
                //将一次性读取内存中数据,形成一个大的字符串
                XmlDocument doc = new XmlDocument();
                doc.Load("files/北京电视台.xml");
                //获取根节点
                XmlNode root = doc.DocumentElement;
                foreach (XmlNode item in root.ChildNodes)
                {
                    if (item.Name.Equals("tvProgramTable"))
                    {
                        //item的子节点里的东西
                        foreach (XmlNode child in item.ChildNodes)
                        {
                            //节目单
                            TvProgram tp = new TvProgram();
                            //节目播出时间
                            tp.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
                            //时段
                             tp.Meridiem=child["meridien"].InnerText;
                            //节目名称
                           tp.ProgramName=child["programName"].InnerText;
                            //视频路径
                           tp.Path=child["path"].InnerText;
                            //加载到tvlist中
                           TvList.Add(tp);
                        }
                    }
                }
    
    
            }
        }
    

      

     

     

    TypeBChannelB类频道

     

     public  class TypeBChannel:ChannelBase
        {
            public override void Fetch()
            {
                //如果这个listview等于空,就能new 节目单
                if (TvList==null)
                {
                    TvList = new List<TvProgram>();
                }
                XmlDocument doc = new XmlDocument();
                doc.Load("files/凤凰卫视.xml");
                XmlNode root = doc.DocumentElement;
                foreach (XmlNode item in root.ChildNodes)
                {
                    
                        foreach (XmlNode child in item.ChildNodes)
                        {
    
                            TvProgram tp = new TvProgram();
                            tp.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
                            tp.ProgramName=child["name"].InnerText;
                            tp.Path=child["path"].InnerText;
                            TvList.Add(tp);
                        }
                    
                }
            }
        }
    

      

    ChannelFactory:工厂类

     //工厂类
        public class ChannelFactory
        {
            public static ChannelBase createChannel(string Type) 
            {
                ChannelBase channel = null;
                switch (Type)
    	     {
            case"TypeA":
                     channel = new TypeAChannel();
            break;
    
            case "TypeB":
            channel = new TypeBChannel();
            break;
            
    	   }
                return channel;
            }
        }
    

    Mian窗体

      public partial class FrmMain : Form
        {
            public FrmMain()
            {
                InitializeComponent();
            }
            //解析北京电视台的节目单
            public void InitDataToTreeview()
            {
                manager.ReadXmlToList();
                List<ChannelBase> list = manager.FullChannels;
                foreach (ChannelBase item in list)
                {
                    //每循环一次代表一个频道对item
                    TreeNode tn = new TreeNode();
                    tn.Text = item.ChannelName;
                    tn.Tag = item;
                    tn2.Nodes.Add(tn);
                    //MessageBox.Show(item.ChannelName);
                }
            }
            //管理
            ChannelManager manager = new ChannelManager();
            //本身为null
            TreeNode tn2;
            private void FrmMain_Load(object sender, EventArgs e)
            {
                TreeNode tn1 = new TreeNode("我的电视台");
                tn2 = new TreeNode("所有电视台");
                tvList.Nodes.Add(tn1);
                tvList.Nodes.Add(tn2);
    
                #region 之前节点加载的方法
                ////添加节点
                //TreeNode tn = new TreeNode("我的电视台");
                //tvList.Nodes.Add(tn);
                //TreeNode te = new TreeNode("所有电视台");
                //tvList.Nodes.Add(te);
                ////添加tn子节点
                //TreeNode bj = new TreeNode("北京电视台");
                //te.Nodes.Add(bj);
                //TreeNode fh = new TreeNode("蜂huandianshit"); 
                #endregion
    
    
    
              //解析电视台的节目单
                InitDataToTreeview();
                //构造根节点==Tvlist
               
               
            }
    
            private void msList_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
    
            }
    
            private void tvList_AfterSelect(object sender, TreeViewEventArgs e)
            {
                //获取Tag的节点
                TreeNode tn= tvList.SelectedNode;
                
                ChannelBase ChannelBase = (ChannelBase)tn.Tag;
                if (tn.Level==1)
                {
                    ChannelBase.Fetch();
                    List <TvProgram> list= ChannelBase.TvList;
                    DgvList.DataSource = list;
                }
            }
        }
    

     还需要在添加files文件因为上边的的代码有在TypeABChannel的lei中要将xml文件转为集合里

    FullChannels.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <TVChannels>
    	<Channel>
    		<channelType>TypeA</channelType> <!--频道编号-->
    		<tvChannel>北京电视台</tvChannel> <!--频道名称-->
    		<path>files/北京电视台.xml</path>           <!--频道对应XML文件的本地路径-->
    	</Channel>
    	<Channel>
    		<channelType>TypeB</channelType>
    		<tvChannel>凤凰卫视</tvChannel>
    		<path>files/凤凰卫视.xml</path>
    	</Channel>
    </TVChannels>
    	
    

      北京电视台.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <typeA version =" 1.0">
        <channelName>北京电视台</channelName>
    	<tvProgramTable>
    		<tvProgram>
    			<playTime>2009-9-29 06:02</playTime> <!--节目播出时间-->
    			<meridien>早间档</meridien> <!--时段-->
    		       
    			<programName>重播:国际双行线</programName> <!--节目名称-->
    			<path>c:a.wma</path>         <!--视频路径-->
    		</tvProgram>
    <tvProgram>
    			<playTime>2009-9-29 07:00</playTime> <!--节目播出时间-->
    			<meridien>早间档</meridien> <!--时段-->
    		       
    			<programName>北京您早</programName> <!--节目名称-->
    			<path>C:New Stories (Highway Blues).wma</path>         <!--视频路径-->
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 09:02</playTime> <!--节目播出时间-->
    			<meridien>早间档</meridien> <!--时段-->
    		       
    			<programName>重播《红星剧场》32集剧:勇者无敌(31)</programName> <!--节目名称-->
    			<path>**</path>         <!--视频路径-->
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 09:58</playTime>
    			
    			<meridien>早间档</meridien>
    			<programName>重播《红星剧场》32集剧:勇者无敌(32)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 11:15</playTime>
    			
    			<meridien>午间档</meridien>
    			<programName>重播:专题片:我爱你,中国(14)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 11:58</playTime>
    			
    			<meridien>午间档</meridien>
    			<programName>身边</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 12:30</playTime>
    			
    			<meridien>午间档</meridien>
    			<programName>特别关注</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 13:05</playTime>
    			
    			<meridien>午间档</meridien>
    			<programName>天下天天谈</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 13:40</playTime>
    			
    			<meridien>午间档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(21)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 14:32</playTime>
    			
    			<meridien>午间档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(22)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 15:27</playTime>
    			
    			<meridien>下午档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(23)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 16:19</playTime>
    			
    			<meridien>下午档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(24)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 17:31</playTime>
    			
    			<meridien>下午档</meridien>
    			<programName>法治进行时</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 18:00</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>新闻晚高峰</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 18:30</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>北京新闻</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 18:56</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>天气预报</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 19:00</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>转播CCTV新闻联播</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 19:31</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>看气象</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 19:40</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>专题片:我爱你,中国(15)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 20:22</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>《爸妈都是老党员》首播庆典</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 21:21</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>《红星剧场》38集剧:咱爸咱妈六十年(1)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2009-9-29 23:25</playTime>
    			
    			<meridien>晚间档</meridien>
    			<programName>重播文艺:花样年华歌舞大赛(5)</programName>
    			<path>**</path>
    		</tvProgram>
    	</tvProgramTable>
    </typeA>
    

    凤凰卫视.xml

    <?xml version="1.0" encoding="utf-8" ?>
    <typeB version =" 1.0">
    	<ProgramList>
    		<Program>
    			<playTime>2009-9-29 01:30</playTime>  <!--播出时间-->
    		
    			<name>简单工厂模式</name>          <!--节目名称-->
    			<path>D:简单工厂模式.wmv</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 02:10</playTime>  <!--播出时间-->
    		
    			<name>非凡人物论成功(713)</name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 02:15</playTime>  <!--播出时间-->
    		
    			<name>有报天天读(28/09/09) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 02:40</playTime>  <!--播出时间-->
    		
    			<name>娱乐大风暴(682) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 03:15</playTime>  <!--播出时间-->
    		
    			<name>上海新长宁集团特约之2009中华小姐环球大赛-美丽前奏(41) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 03:20</playTime>  <!--播出时间-->
    		
    			<name>完全时尚手册:天桥云裳(632)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 03:40</playTime>  <!--播出时间-->
    		
    			<name>东风康明斯凤凰冲击播:天力士特约之今日看世界(39)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 04:25</playTime>  <!--播出时间-->
    		
    			<name>音乐中国风(442)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 04:35</playTime>  <!--播出时间-->
    		
    			<name>维维健康新概念(193) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 04:40</playTime>  <!--播出时间-->
    		
    			<name>红牛凤凰全球连线(28/09/09) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 05:05</playTime>  <!--播出时间-->
    		
    			<name>红云红河时事开讲(28/09/09)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2009-9-29 05:30</playTime>  <!--播出时间-->
    		
    			<name>别巡检调查队(34)(R) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    	</ProgramList>
    </typeB>
    

     未完待续......请等待...... 

     

     

      

     

     

      

     

  • 相关阅读:
    Python基础笔记
    Oracle PL/SQL学习之Hello World(0)
    编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
    编程开发之--Oracle数据库--存储过程和存储函数(2)
    编程开发之--Oracle数据库--存储过程和存储函数(1)
    火车票售票系统
    MySQL 字段内容区分大小写
    json_encode($b, JSON_FORCE_OBJECT) 可以强制转换成对象
    Sublime Text3配置
    springboot-配置多个数据源
  • 原文地址:https://www.cnblogs.com/yejiaojiao/p/5248254.html
Copyright © 2011-2022 走看看