网络电视精灵

2018-06-17 21:18:17来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

这篇文章的目的主要为了后续工作的使用,在这里对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文件因为上边的的代码有在TypeA\BChannel的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>

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

 

 

 

 

 

  

 

 

  

 

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:C#下解决DrawImage画出来的Image变大了的问题

下一篇:c# 委托与异步调用