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

    窗体样本:

    XML文件

    *存储频道信息

     
    1. <?xml version="1.0" encoding="utf-8" ?>  
    2. <TVChannels>  
    3.     <Channel>  
    4.         <channelType>TypeA</channelType<!--频道类型-->  
    5.         <tvChannel>北京电视台</tvChannel<!--频道名称-->  
    6.         <path>files/北京电视台.xml</path>  <!--频道对应XML文件的本地路径-->  
    7.     </Channel>  
    8.     <Channel>  
    9.         <channelType>TypeB</channelType>  
    10.         <tvChannel>凤凰卫视</tvChannel>  
    11.         <path>files/凤凰卫视.xml</path>  
    12.     </Channel>  
    13. </TVChannels>  
    14.       
    <?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>
    	

    *北京电视台

    1. <?xml version="1.0" encoding="utf-8" ?>  
    2. <typeA version =" 1.0">  
    3.     <channelName>北京电视台</channelName>  
    4.     <tvProgramTable>  
    5.         <tvProgram>  
    6.             <playTime>2013-9-29 06:02</playTime<!--节目播出时间-->  
    7.             <meridien>早间档</meridien<!--时段-->         
    8.             <programName>重播:国际双行线</programName<!--节目名称-->  
    9.             <path>c:a.wma</path>         <!--视频路径-->  
    10.         </tvProgram>  
    11.         <tvProgram>  
    12.             <playTime>2013-9-29 07:00</playTime<!--节目播出时间-->  
    13.             <meridien>早间档</meridien<!--时段-->  
    14.             <programName>北京您早</programName<!--节目名称-->  
    15.             <path>C:New Stories (Highway Blues).wma</path>         <!--视频路径-->  
    16.         </tvProgram>  
    17.         <tvProgram>  
    18.             <playTime>2013-9-29 09:02</playTime<!--节目播出时间-->  
    19.             <meridien>早间档</meridien<!--时段-->     
    20.             <programName>重播《红星剧场》32集剧:勇者无敌(31)</programName<!--节目名称-->  
    21.             <path>**</path>         <!--视频路径-->  
    22.         </tvProgram>  
    23.         <tvProgram>  
    24.             <playTime>2013-9-29 09:58</playTime>  
    25.             <meridien>早间档</meridien>  
    26.             <programName>重播《红星剧场》32集剧:勇者无敌(32)</programName>  
    27.             <path>**</path>  
    28.         </tvProgram>  
    29.         <tvProgram>  
    30.             <playTime>2013-9-29 11:15</playTime>  
    31.             <meridien>午间档</meridien>  
    32.             <programName>重播:专题片:我爱你,中国(14)</programName>  
    33.             <path>**</path>  
    34.         </tvProgram>  
    35.         <tvProgram>  
    36.             <playTime>2013-9-29 11:58</playTime>  
    37.             <meridien>午间档</meridien>  
    38.             <programName>身边</programName>  
    39.             <path>**</path>  
    40.         </tvProgram>  
    41.         <tvProgram>  
    42.             <playTime>2013-9-29 12:30</playTime>  
    43.             <meridien>午间档</meridien>  
    44.             <programName>特别关注</programName>  
    45.             <path>**</path>  
    46.         </tvProgram>  
    47.         <tvProgram>  
    48.             <playTime>2013-9-29 13:05</playTime>  
    49.             <meridien>午间档</meridien>  
    50.             <programName>天下天天谈</programName>  
    51.             <path>**</path>  
    52.         </tvProgram>  
    53.         <tvProgram>  
    54.             <playTime>2013-9-29 13:40</playTime>  
    55.             <meridien>午间档</meridien>  
    56.             <programName>《玫瑰剧场》55集剧:闯关东中篇(21)</programName>  
    57.             <path>**</path>  
    58.         </tvProgram>  
    59.         <tvProgram>  
    60.             <playTime>2013-9-29 14:32</playTime>  
    61.             <meridien>午间档</meridien>  
    62.             <programName>《玫瑰剧场》55集剧:闯关东中篇(22)</programName>  
    63.             <path>**</path>  
    64.         </tvProgram>  
    65.         <tvProgram>  
    66.             <playTime>2013-9-29 15:27</playTime>  
    67.             <meridien>下午档</meridien>  
    68.             <programName>《玫瑰剧场》55集剧:闯关东中篇(23)</programName>  
    69.             <path>**</path>  
    70.         </tvProgram>  
    71.         <tvProgram>  
    72.             <playTime>2013-9-29 16:19</playTime>  
    73.             <meridien>下午档</meridien>  
    74.             <programName>《玫瑰剧场》55集剧:闯关东中篇(24)</programName>  
    75.             <path>**</path>  
    76.         </tvProgram>  
    77.         <tvProgram>  
    78.             <playTime>2013-9-29 17:31</playTime>  
    79.             <meridien>下午档</meridien>  
    80.             <programName>法治进行时</programName>  
    81.             <path>**</path>  
    82.         </tvProgram>  
    83.         <tvProgram>  
    84.             <playTime>2013-9-29 18:00</playTime>  
    85.             <meridien>晚间档</meridien>  
    86.             <programName>新闻晚高峰</programName>  
    87.             <path>**</path>  
    88.         </tvProgram>  
    89.         <tvProgram>  
    90.             <playTime>2013-9-29 18:30</playTime>  
    91.             <meridien>晚间档</meridien>  
    92.             <programName>北京新闻</programName>  
    93.             <path>**</path>  
    94.         </tvProgram>  
    95.         <tvProgram>  
    96.             <playTime>2013-9-29 18:56</playTime>  
    97.             <meridien>晚间档</meridien>  
    98.             <programName>天气预报</programName>  
    99.             <path>**</path>  
    100.         </tvProgram>  
    101.         <tvProgram>  
    102.             <playTime>2013-9-29 19:00</playTime>  
    103.             <meridien>晚间档</meridien>  
    104.             <programName>转播CCTV新闻联播</programName>  
    105.             <path>**</path>  
    106.         </tvProgram>  
    107.         <tvProgram>  
    108.             <playTime>2013-9-29 19:31</playTime>  
    109.             <meridien>晚间档</meridien>  
    110.             <programName>看气象</programName>  
    111.             <path>**</path>  
    112.         </tvProgram>  
    113.         <tvProgram>  
    114.             <playTime>2013-9-29 19:40</playTime>  
    115.             <meridien>晚间档</meridien>  
    116.             <programName>专题片:我爱你,中国(15)</programName>  
    117.             <path>**</path>  
    118.         </tvProgram>  
    119.         <tvProgram>  
    120.             <playTime>2013-9-29 20:22</playTime>  
    121.             <meridien>晚间档</meridien>  
    122.             <programName>《爸妈都是老党员》首播庆典</programName>  
    123.             <path>**</path>  
    124.         </tvProgram>  
    125.         <tvProgram>  
    126.             <playTime>2013-9-29 21:21</playTime>  
    127.             <meridien>晚间档</meridien>  
    128.             <programName>《红星剧场》38集剧:咱爸咱妈六十年(1)</programName>  
    129.             <path>**</path>  
    130.         </tvProgram>  
    131.         <tvProgram>  
    132.             <playTime>2013-9-29 23:25</playTime>  
    133.             <meridien>晚间档</meridien>  
    134.             <programName>重播文艺:花样年华歌舞大赛(5)</programName>  
    135.             <path>**</path>  
    136.         </tvProgram>  
    137.     </tvProgramTable>  
    138. </typeA>  
    <?xml version="1.0" encoding="utf-8" ?>
    <typeA version =" 1.0">
        <channelName>北京电视台</channelName>
    	<tvProgramTable>
    		<tvProgram>
    			<playTime>2013-9-29 06:02</playTime> <!--节目播出时间-->
    			<meridien>早间档</meridien> <!--时段-->       
    			<programName>重播:国际双行线</programName> <!--节目名称-->
    			<path>c:a.wma</path>         <!--视频路径-->
    		</tvProgram>
            <tvProgram>
    			<playTime>2013-9-29 07:00</playTime> <!--节目播出时间-->
    			<meridien>早间档</meridien> <!--时段-->
    			<programName>北京您早</programName> <!--节目名称-->
    			<path>C:New Stories (Highway Blues).wma</path>         <!--视频路径-->
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 09:02</playTime> <!--节目播出时间-->
    			<meridien>早间档</meridien> <!--时段-->   
    			<programName>重播《红星剧场》32集剧:勇者无敌(31)</programName> <!--节目名称-->
    			<path>**</path>         <!--视频路径-->
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 09:58</playTime>
    			<meridien>早间档</meridien>
    			<programName>重播《红星剧场》32集剧:勇者无敌(32)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 11:15</playTime>
    			<meridien>午间档</meridien>
    			<programName>重播:专题片:我爱你,中国(14)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 11:58</playTime>
    			<meridien>午间档</meridien>
    			<programName>身边</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 12:30</playTime>
    			<meridien>午间档</meridien>
    			<programName>特别关注</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 13:05</playTime>
    			<meridien>午间档</meridien>
    			<programName>天下天天谈</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 13:40</playTime>
    			<meridien>午间档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(21)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 14:32</playTime>
    			<meridien>午间档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(22)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 15:27</playTime>
    			<meridien>下午档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(23)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 16:19</playTime>
    			<meridien>下午档</meridien>
    			<programName>《玫瑰剧场》55集剧:闯关东中篇(24)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 17:31</playTime>
    			<meridien>下午档</meridien>
    			<programName>法治进行时</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 18:00</playTime>
    			<meridien>晚间档</meridien>
    			<programName>新闻晚高峰</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 18:30</playTime>
    			<meridien>晚间档</meridien>
    			<programName>北京新闻</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 18:56</playTime>
    			<meridien>晚间档</meridien>
    			<programName>天气预报</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 19:00</playTime>
    			<meridien>晚间档</meridien>
    			<programName>转播CCTV新闻联播</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 19:31</playTime>
    			<meridien>晚间档</meridien>
    			<programName>看气象</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 19:40</playTime>
    			<meridien>晚间档</meridien>
    			<programName>专题片:我爱你,中国(15)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 20:22</playTime>
    			<meridien>晚间档</meridien>
    			<programName>《爸妈都是老党员》首播庆典</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 21:21</playTime>
    			<meridien>晚间档</meridien>
    			<programName>《红星剧场》38集剧:咱爸咱妈六十年(1)</programName>
    			<path>**</path>
    		</tvProgram>
    		<tvProgram>
    			<playTime>2013-9-29 23:25</playTime>
    			<meridien>晚间档</meridien>
    			<programName>重播文艺:花样年华歌舞大赛(5)</programName>
    			<path>**</path>
    		</tvProgram>
    	</tvProgramTable>
    </typeA>
    
    
    


    *凤凰卫视

    1. <?xml version="1.0" encoding="utf-8" ?>  
    2. <typeB version =" 1.0">  
    3.     <ProgramList>  
    4.         <Program>  
    5.             <playTime>2013-9-29 01:30</playTime>  <!--播出时间-->  
    6.             <name>金龙鱼凤凰剧场:李算(9)</name>          <!--节目名称-->  
    7.             <path>**</path>          <!--节目视频的本地路径-->  
    8.         </Program>  
    9.         <Program>  
    10.             <playTime>2013-9-29 02:10</playTime>  <!--播出时间-->  
    11.             <name>非凡人物论成功(713)</name>          <!--节目名称-->  
    12.             <path>**</path>          <!--节目视频的本地路径-->  
    13.         </Program>  
    14.         <Program>  
    15.             <playTime>2013-9-29 02:15</playTime>  <!--播出时间-->  
    16.             <name>有报天天读(28/09/09) </name>          <!--节目名称-->  
    17.             <path>**</path>          <!--节目视频的本地路径-->  
    18.         </Program>  
    19.         <Program>  
    20.             <playTime>2013-9-29 02:40</playTime>  <!--播出时间-->  
    21.             <name>娱乐大风暴(682) </name>          <!--节目名称-->  
    22.             <path>**</path>          <!--节目视频的本地路径-->  
    23.         </Program>  
    24.         <Program>  
    25.             <playTime>2013-9-29 03:15</playTime>  <!--播出时间-->  
    26.             <name>上海新长宁集团特约之2013中华小姐环球大赛-美丽前奏(41) </name>          <!--节目名称-->  
    27.             <path>**</path>          <!--节目视频的本地路径-->  
    28.         </Program>  
    29.         <Program>  
    30.             <playTime>2013-9-29 03:20</playTime>  <!--播出时间-->  
    31.             <name>完全时尚手册:天桥云裳(632)  </name>          <!--节目名称-->  
    32.             <path>**</path>          <!--节目视频的本地路径-->  
    33.         </Program>  
    34.         <Program>  
    35.             <playTime>2013-9-29 03:40</playTime>  <!--播出时间-->  
    36.             <name>东风康明斯凤凰冲击播:天力士特约之今日看世界(39)  </name>          <!--节目名称-->  
    37.             <path>**</path>          <!--节目视频的本地路径-->  
    38.         </Program>  
    39.         <Program>  
    40.             <playTime>2013-9-29 04:25</playTime>  <!--播出时间-->  
    41.             <name>音乐中国风(442)  </name>          <!--节目名称-->  
    42.             <path>**</path>          <!--节目视频的本地路径-->  
    43.         </Program>  
    44.         <Program>  
    45.             <playTime>2013-9-29 04:35</playTime>  <!--播出时间-->  
    46.             <name>维维健康新概念(193) </name>          <!--节目名称-->  
    47.             <path>**</path>          <!--节目视频的本地路径-->  
    48.         </Program>  
    49.         <Program>  
    50.             <playTime>2013-9-29 04:40</playTime>  <!--播出时间-->  
    51.             <name>红牛凤凰全球连线(28/09/09) </name>          <!--节目名称-->  
    52.             <path>**</path>          <!--节目视频的本地路径-->  
    53.         </Program>  
    54.         <Program>  
    55.             <playTime>2013-9-29 05:05</playTime>  <!--播出时间-->  
    56.             <name>红云红河时事开讲(28/09/09)  </name>          <!--节目名称-->  
    57.             <path>**</path>          <!--节目视频的本地路径-->  
    58.         </Program>  
    59.         <Program>  
    60.             <playTime>2013-9-29 05:30</playTime>  <!--播出时间-->  
    61.             <name>别巡检调查队(34)(R) </name>          <!--节目名称-->  
    62.             <path>**</path>          <!--节目视频的本地路径-->  
    63.         </Program>  
    64.     </ProgramList>  
    65. </typeB>  
    <?xml version="1.0" encoding="utf-8" ?>
    <typeB version =" 1.0">
    	<ProgramList>
    		<Program>
    			<playTime>2013-9-29 01:30</playTime>  <!--播出时间-->
    			<name>金龙鱼凤凰剧场:李算(9)</name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 02:10</playTime>  <!--播出时间-->
    			<name>非凡人物论成功(713)</name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 02:15</playTime>  <!--播出时间-->
    			<name>有报天天读(28/09/09) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 02:40</playTime>  <!--播出时间-->
    			<name>娱乐大风暴(682) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 03:15</playTime>  <!--播出时间-->
    			<name>上海新长宁集团特约之2013中华小姐环球大赛-美丽前奏(41) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 03:20</playTime>  <!--播出时间-->
    			<name>完全时尚手册:天桥云裳(632)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 03:40</playTime>  <!--播出时间-->
    			<name>东风康明斯凤凰冲击播:天力士特约之今日看世界(39)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 04:25</playTime>  <!--播出时间-->
    			<name>音乐中国风(442)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 04:35</playTime>  <!--播出时间-->
    			<name>维维健康新概念(193) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 04:40</playTime>  <!--播出时间-->
    			<name>红牛凤凰全球连线(28/09/09) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 05:05</playTime>  <!--播出时间-->
    			<name>红云红河时事开讲(28/09/09)  </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    		<Program>
    			<playTime>2013-9-29 05:30</playTime>  <!--播出时间-->
    			<name>别巡检调查队(34)(R) </name>          <!--节目名称-->
    			<path>**</path>          <!--节目视频的本地路径-->
    		</Program>
    	</ProgramList>
    </typeB>

    2.分类

    *抽象类ChannelBase存储频道基本信息,定义抽象方法Fetch()解析频道节目单信息

    [csharp] view plain copy
     
    1. public abstract  class ChannelBase  
    2.    {  
    3.        #region 属性  
    4.   
    5.        
    6.        /// <summary>  
    7.        /// 频道名称  
    8.        /// </summary>  
    9.        private string channelName;  
    10.        public string ChannelName  
    11.        {  
    12.            get { return channelName; }  
    13.            set { channelName = value; }  
    14.        }  
    15.        /// <summary>  
    16.        /// 频道路径  
    17.        /// </summary>  
    18.        private string path;  
    19.        public string Path  
    20.        {  
    21.            get { return path; }  
    22.            set { path = value; }  
    23.        }  
    24.        /// <summary>  
    25.        /// 节目列表  
    26.        /// </summary>  
    27.        private List<TvProgram> programList;  
    28.        public List< TvProgram> ProgramList  
    29.        {  
    30.            get { return programList; }  
    31.            set { this.programList = value; }  
    32.        }  
    33.     #endregion  
    34.   
    35.        public abstract void Fetch();  
    36.          
    37.    }  
    *电视节目类
    [csharp] view plain copy
     
    1. /// <summary>  
    2.    /// 节目对象  
    3.    /// </summary>  
    4.    public class TvProgram  
    5.    {  
    6.        #region 属性  
    7.   
    8.        /// <summary>  
    9.        /// 播出时间  
    10.        /// </summary>  
    11.        private DateTime playTime;  
    12.        public DateTime PlayTime  
    13.        {  
    14.            get { return playTime; }  
    15.            set { playTime = value; }  
    16.        }  
    17.        /// <summary>  
    18.        /// 时段  
    19.        /// </summary>  
    20.        private string median;  
    21.        public string Median  
    22.        {  
    23.            get { return median; }  
    24.            set { median = value; }  
    25.        }  
    26.        /// <summary>  
    27.        /// 名称  
    28.        /// </summary>  
    29.        private string programName;  
    30.        public string ProgramName  
    31.        {  
    32.            get { return programName; }  
    33.            set { programName = value; }  
    34.        }  
    35.        /// <summary>  
    36.        /// 文件路径  
    37.        /// </summary>  
    38.        private string filePath;  
    39.        public string FilePath  
    40.        {  
    41.            get { return filePath; }  
    42.            set { filePath = value; }  
    43.        }  
    44.        #endregion  
    45.   
    46.    }  

    *TypeA类型频道类
    [csharp] view plain copy
     
    1. /// <summary>  
    2. /// TypeA类型节目单解析  
    3.   
    4. /// </summary>  
    5. public  class TypeAChannel:ChannelBase  
    6. {  
    7.     /// <summary>  
    8.     /// 多态,覆盖父类的获取频道列表方法  
    9.   
    10.     /// </summary>  
    11.     public override void Fetch()  
    12.     {  
    13.         //获取频道列表  
    14.         XmlDocument xmlDoc = new XmlDocument();  
    15.         try  
    16.         {  
    17.             //加载频道节目单文件  
    18.   
    19.             xmlDoc.Load(Path);  
    20.         }  
    21.         catch (Exception ex)  
    22.         {  
    23.             Console.WriteLine("文件加载失败:" + ex.Message);  
    24.             return;  
    25.         }  
    26.         XmlElement elem = xmlDoc.DocumentElement;  
    27.         if (ProgramList == null)  
    28.         {  
    29.             ProgramList = new List<TvProgram>();  
    30.         }  
    31.         foreach (XmlNode node in elem.ChildNodes)  
    32.         {  
    33.             if (node.Name == "tvProgramTable")  
    34.             {  
    35.                 foreach (XmlNode subnode in node.ChildNodes)  
    36.                 {  
    37.                     TvProgram program = new TvProgram();  
    38.                     program.PlayTime = DateTime.Parse(subnode["playTime"].InnerText);  
    39.                     program.Median = subnode["meridien"].InnerText;  
    40.                     program.ProgramName = subnode["programName"].InnerText;  
    41.                     program.FilePath = subnode["path"].InnerText;  
    42.   
    43.                     this.ProgramList.Add(program);  
    44.                 }  
    45.             }  
    46.         }   
    47.     }  
    48. }  

    *TypeB类型频道类
    [csharp] view plain copy
     
    1.   
    [csharp] view plain copy
     
    1. /// <summary>  
    2.    /// TypeB类型节目单解析  
    3.   
    4.    /// </summary>  
    5.    public class TypeBChannel : ChannelBase  
    6.    {  
    7.        /// <summary>  
    8.        /// 多态,覆盖父类方法,获取TypeBChannel的节目列表  
    9.   
    10.        /// </summary>  
    11.        public override void Fetch()  
    12.        {  
    13.            //获取节目列表  
    14.            XmlDocument xmlDoc = new XmlDocument();  
    15.            try  
    16.            {  
    17.                xmlDoc.Load(Path);  
    18.            }  
    19.            catch (Exception ex)  
    20.            {  
    21.                Console.WriteLine("文件加载失败:" + ex.Message);  
    22.                return;  
    23.            }  
    24.            XmlElement elem = xmlDoc.DocumentElement;  
    25.            if (ProgramList == null)  
    26.            {  
    27.                ProgramList = new List<TvProgram>();  
    28.            }  
    29.            foreach (XmlNode node in elem.ChildNodes[0])//【0】第一个节点  
    30.   
    31.            {  
    32.                TvProgram programe = new TvProgram();  
    33.                programe.PlayTime = DateTime.Parse(node["playTime"].InnerText);  
    34.                programe.Median = "";  
    35.   
    36.                programe.ProgramName = node["name"].InnerText;  
    37.                programe.FilePath = node["path"].InnerText;  
    38.   
    39.                this.ProgramList.Add(programe);  
    40.            }  
    41.        }  
    42.    }  
    *channelManager类:读取xml文件,加载所有频道列表.根据频道类型创建"工厂"
    [csharp] view plain copy
     
    1. public class ChannelManager  
    2.    {  
    3.       
    4.        /// <summary>  
    5.        /// 频道文件路径  
    6.        /// </summary>  
    7.        private string channelPath ="files/FullChannels.xml";  
    8.      
    9.        /// <summary>  
    10.        /// 全部频道  
    11.        /// </summary>  
    12.        private Dictionary<string, ChannelBase> fullChannel=new Dictionary<string,ChannelBase>();  
    13.        public Dictionary<string, ChannelBase> FullChannel  
    14.        {  
    15.            get   
    16.            {   
    17.                return fullChannel;   
    18.            }  
    19.        }  
    20.   
    21.        //持久化信息  
    22.        private SavingInfo seria = new SavingInfo();  
    23.        public SavingInfo Seria  
    24.        {  
    25.            get { return seria; }  
    26.   
    27.        }  
    28.   
    29.        /// <summary>  
    30.        /// 启动程序时,读取FullChannels.xml,加载所有频道列表  
    31.   
    32.        /// </summary>  
    33.        public void LoadChannel()  
    34.        {  
    35.            //预处理集合,防止被重复加载数据  
    36.            try  
    37.            {  
    38.                fullChannel.Clear();  
    39.                XmlDocument xmlDoc = new XmlDocument();  
    40.                xmlDoc.Load(channelPath);  
    41.                XmlElement xmlRoot = xmlDoc.DocumentElement;  
    42.                foreach (XmlNode node in xmlRoot.ChildNodes)  
    43.                {  
    44.                    //根据频道类型创建对象  
    45.                    ChannelBase channel =CreateChannel(node["channelType"].InnerText);  
    46.                    channel.ChannelName = node["tvChannel"].InnerText;  
    47.                    channel.Path = node["path"].InnerText;  
    48.                    this.fullChannel.Add(channel.ChannelName, channel);  
    49.                }  
    50.   
    51.            }  
    52.            catch  
    53.            {  
    54.                throw new Exception("数据加载错误!");  
    55.            }  
    56.   
    57.              
    58.        }  
    59.   
    60.        public  ChannelBase CreateChannel(string type)  
    61.        {  
    62.            ChannelBase channel = null;  
    63.            switch (type)  
    64.            {  
    65.                case "TypeA":  
    66.                    channel = new TypeAChannel();  
    67.                    break;  
    68.                case "TypeB":  
    69.                    channel = new TypeBChannel();  
    70.                    break;  
    71.                default:  
    72.                    break;  
    73.            }  
    74.            return channel;  
    75.        }  
    76.   
    77.   
    78.        //保存定制频道信息的文本文件名称  
    79.        private string saveFileName = @"filessave";  
    80.        /// <summary>  
    81.        /// 将我的电台信息存储到文本文件之中  
    82.        /// 要解决中文乱码问题  
    83.        /// </summary>  
    84.        public void SaveAsTxt()  
    85.        {  
    86.            try  
    87.            {  
    88.                FileStream fs = new FileStream(saveFileName + ".txt", FileMode.Create);  
    89.                StreamWriter writer = new StreamWriter(fs, Encoding.GetEncoding("GB2312"));  
    90.                string type = "";  
    91.                for (int index = 0; index < this.seria.MyFavor.Count; index++)  
    92.                {  
    93.                    ChannelBase channel = this.seria.MyFavor[index];  
    94.                    if (channel is TypeBChannel)  
    95.                    {  
    96.                        type = "TypeB";  
    97.                    }  
    98.                    else  
    99.                    {  
    100.                        type = "TypeA";  
    101.                    }  
    102.                    writer.WriteLine(type  
    103.                        + "|" + channel.ChannelName  
    104.                        + "|" + channel.Path);  
    105.                }  
    106.   
    107.                writer.WriteLine("End of my Favor");  
    108.                writer.Close();  
    109.                fs.Close();  
    110.   
    111.            }  
    112.            catch (Exception ex)  
    113.            {  
    114.                MessageBox.Show("写入文件失败:" + ex.ToString());  
    115.            }  
    116.        }  
    117.   
    118.        /// <summary>  
    119.        /// 从文本文件之中读取"我的电台"信息  
    120.   
    121.        /// </summary>  
    122.        public void LoadFromText()  
    123.        {  
    124.            //#region 存在性判断  
    125.   
    126.            if (!File.Exists(@"filessave.txt"))  
    127.            {//不存在则不再处理  
    128.                return;  
    129.            }  
    130.            //#endregion  
    131.   
    132.            try  
    133.            {  
    134.                StreamReader reader = new StreamReader(saveFileName + ".txt", Encoding.GetEncoding("GB2312"));  
    135.                string line = reader.ReadLine();  
    136.                string[] propertyValues;  
    137.                ChannelBase channel = null;  
    138.                 
    139.                while (line.Trim() != "End of my Favor")  
    140.                {  
    141.   
    142.                    propertyValues = line.Split('|');  
    143.                    channel = CreateChannel(propertyValues[0]);  
    144.   
    145.                    channel.ChannelName = propertyValues[1];  
    146.                    channel.Path = propertyValues[2];  
    147.                    this.seria.MyFavor.Add(channel);  
    148.                    line = reader.ReadLine();  
    149.                }  
    150.                reader.Close();  
    151.            }  
    152.            catch (Exception ex)  
    153.            {  
    154.                MessageBox.Show("文件操作异常:" + ex.Message);  
    155.            }  
    156.        }  
    157.    }  

    *持久化信息类SavingInfo
    [csharp] view plain copy
     
    1. //持久化信息类  
    2.   public class SavingInfo  
    3.   {  
    4.       public SavingInfo()  
    5.       {  
    6.           this.myFavor = new List<ChannelBase>();  
    7.       }  
    8.       #region 属性  
    9.   
    10.   
    11.       /// <summary>  
    12.       /// 我的收藏  
    13.       /// </summary>  
    14.       private List<ChannelBase> myFavor;  
    15.       public List<ChannelBase> MyFavor  
    16.       {  
    17.           get  
    18.           {  
    19.               if (myFavor == null)  
    20.               {  
    21.                   return new List<ChannelBase>();  
    22.               }  
    23.               else  
    24.               {  
    25.                   return myFavor;  
    26.               }  
    27.           }  
    28.           set { myFavor = value; }  
    29.       }  
    30.       #endregion  
    31.   
    32.   }  

    3.主窗体

    *电视台初始化

    [csharp] view plain copy
     
    1. /// <summary>  
    2.         /// 管理器类  
    3.         /// </summary>  
    4.         private ChannelManager myManager = new ChannelManager();  
    5.   
    6.         public MainForm()  
    7.         {  
    8.             InitializeComponent();  
    9.         }  
    10.   
    11.         /// <summary>  
    12.         /// 电视台初始化  
    13.         /// </summary>  
    14.         private void InitChannel()  
    15.         {  
    16.             //加载所有频道信息  
    17.             myManager.LoadChannel();  
    18.   
    19.             //加载用户定制的频道信息  
    20.             myManager.LoadFromText();  
    21.   
    22.             //刷新TreeView显示  
    23.             UpdateTreeView();  
    24.   
    25.         }  
    
    
    [csharp] view plain copy
     
    1. /// <summary>  
    2.        /// 窗体加载事件  
    3.        /// </summary>  
    4.        /// <param name="sender"></param>  
    5.        /// <param name="e"></param>  
    6.        private void MainForm_Load(object sender, EventArgs e)  
    7.        {  
    8.            this.SetVisible(true);  
    9.            this.InitChannel();  
    10.   
    11.        }  
    [csharp] view plain copy
     
    1. /// <summary>  
    2.        /// 控制DataGridView和listView的显示  
    3.   
    4.        /// </summary>  
    5.        /// <param name="boolInfo"></param>  
    6.        private void SetVisible(bool boolInfo)  
    7.        {  
    8.            this.dgvProgList.Visible = boolInfo;  
    9.        }  

    *刷新频道列表
    [csharp] view plain copy
     
    1. private void UpdateTreeView()  
    2.       {  
    3.           //清空所有节点  
    4.   
    5.           this.tvChannel.Nodes.Clear();  
    6.   
    7.           //初始化根结点  
    8.           TreeNode nodeFirstLevel = new TreeNode("我的电视台");  
    9.           nodeFirstLevel.ImageIndex = 0;  
    10.           this.tvChannel.Nodes.Add(nodeFirstLevel);  
    11.           nodeFirstLevel = new TreeNode("所有电视台");  
    12.           this.tvChannel.Nodes.Add(nodeFirstLevel);  
    13.   
    14.           //加载“所有电视台”  
    15.   
    16.           foreach (ChannelBase dicOne in myManager.FullChannel.Values)  
    17.           {  
    18.               TreeNode node = new TreeNode();  
    19.               node.Text = dicOne.ChannelName;  
    20.               node.Tag = dicOne;  
    21.               node.ImageIndex = 1;  
    22.               this.tvChannel.Nodes[1].Nodes.Add(node);  
    23.   
    24.           }  
    25.   
    26.           //加载“我的电视台”  
    27.   
    28.           foreach (ChannelBase dicOne in myManager.Seria.MyFavor)  
    29.           {  
    30.               TreeNode node = new TreeNode();  
    31.               node.Text = dicOne.ChannelName;  
    32.               node.Tag = dicOne;  
    33.               node.ImageIndex = 1;  
    34.               this.tvChannel.Nodes[0].Nodes.Add(node);  
    35.           }  
    36.   
    37.           //展开所有节点  
    38.   
    39.           tvChannel.ExpandAll();  
    40.       }  

    *将一个电台添加到我的电台中
    [csharp] view plain copy
     
    1. private void tsmAddToFavor_Click(object sender, EventArgs e)  
    2.        {  
    3.            TreeNode node = this.tvChannel.SelectedNode;  
    4.            //没有选中任何节点,返回  
    5.   
    6.            if (node == null)  
    7.            {  
    8.                return;  
    9.            }  
    10.            ChannelBase ch = (ChannelBase)node.Tag;  
    11.            //保证不重复  
    12.   
    13.            foreach (TreeNode nodeItem in this.tvChannel.Nodes[0].Nodes)  
    14.            {  
    15.                if (nodeItem.Text.Trim() == node.Text.Trim())  
    16.                {  
    17.                    return;//发现“我的收藏夹”中有这个电台,就退出,不再执行添加工作。  
    18.   
    19.                }  
    20.            }  
    21.            this.myManager.Seria.MyFavor.Add(ch);  
    22.            this.UpdateTreeView();  
    23.        }  

    右键单击树型菜单,控制右键菜单的菜单

    即“所有电视台”的子节点的右键中只显示“加入到我的电台”
    而“我的电视台”的子节点的右键只能显示"删除"



    [csharp] view plain copy
     
    1. private void tvChannel_MouseClick(object sender, MouseEventArgs e)  
    2.         {  
    3.             //只处理右键事件  
    4.   
    5.             TreeNode node = this.tvChannel.SelectedNode;  
    6.             if (node != null && node.Level != 0)//有节点被选中且不是顶级节点  
    7.             {  
    8.                 //这句代码保证右键点击树的时候,那个节点处于选中状态  
    9.   
    10.                 if (node.Parent.Text == "所有电视台")  
    11.                 {  
    12.                     //使"加入到我的电台"这个菜单项可见  
    13.   
    14.                     cmenuRight.Items[1].Visible = false;  
    15.                     cmenuRight.Items[0].Visible = true;  
    16.                 }  
    17.                 else  
    18.                 {  
    19.                     //使“删除”菜单项可见  
    20.                     cmenuRight.Items[0].Visible = false;  
    21.                     cmenuRight.Items[1].Visible = true;  
    22.                 }  
    23.             }  
    24.             else  
    25.             {  
    26.                 cmenuRight.Items[1].Visible = false;  
    27.                 cmenuRight.Items[0].Visible = false;  
    28.             }  
    29.         }  
    
    
    [csharp] view plain copy
     
    1. private void TMenuItemDel_Click(object sender, EventArgs e)  
    2.        {  
    3.            TreeNode node = this.tvChannel.SelectedNode;  
    4.            //没有选中任何节点,返回  
    5.            if (node == null)  
    6.            {  
    7.                return;  
    8.            }  
    9.            ChannelBase ch = (ChannelBase)node.Tag;  
    10.   
    11.            this.myManager.Seria.MyFavor.Remove(ch);  
    12.            this.UpdateTreeView();  
    13.        }  

    树形菜单选项改变事件:改变频道,加载选中频道的节目信息
    [csharp] view plain copy
     
      1. private void tvChannel_AfterSelect(object sender, TreeViewEventArgs e)  
      2.         {  
      3.             //控制DataGridView的显示  
      4.   
      5.             this.SetVisible(true);  
      6.             //e.Node选中的节点  
      7.   
      8.             if (e.Node.Level != 0)  
      9.             {  
      10.                 ChannelBase ch = (ChannelBase)e.Node.Tag;  
      11.                 if (ch.ProgramList != null)  
      12.                 {  
      13.                     ch.ProgramList.Clear();//清除当前节目单  
      14.   
      15.                 }  
      16.                 ch.Fetch(); //读取节目单  
      17.   
      18.                 this.dgvProgList.DataSource = ch.ProgramList; //绑定到数据展示控件显示  
      19.   
      20.                 this.dgvProgList.Tag = ch.ChannelName; //将当前Dgv的Tag属性设为频道的名称  
      21.             }  
      22.         }  



  • 相关阅读:
    Javascript的IE和Firefox兼容性汇编(转)
    JSP里request变量列表
    C#中的接口(转)
    寒羽对帝国的理解(通向高手之路)(转)
    怎样获得Sqlserver 2000得实例列表和运行在一个实例上得数据库列表(转)
    jsp文件上传的处理(转)
    用户不上你的网站的50个原因
    慈勤强的JFolder1.0版代码(JSP)
    管理常用SQL语句
    .net 取得访问的url
  • 原文地址:https://www.cnblogs.com/wuayn/p/8903567.html
Copyright © 2011-2022 走看看