效果展示
该项目主要练习xml文件解析和面向对象思维;
1.电视台和节目信息都要从xml文件中解析,并绑定;
2.实现点击电视频道节点显示该频道的电视节目信息;
3.当时间到达用户设置的节目提醒时间后弹出窗口提醒用户节目即将开始;
1.点击频道显示该频道的节目信息
2.选中全部电视台下的节点,右键显示右键菜单‘添加到我的电视台’;
3.选中我的电视台下的节点,右键显示右键菜单‘删除’;
4:右键电视节目信息显示设置提醒
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 version="1.0" encoding="utf-8" ?> <typeA version =" 1.0"> <channelName>北京电视台</channelName> <tvProgramTable> <tvProgram> <playTime>2016-9-5 16:21</playTime> <!--节目播出时间--> <meridien>早间档</meridien> <!--时段--> <programName>重播:国际双行线</programName> <!--节目名称--> <path>c:a.wma</path> <!--视频路径--> </tvProgram> <tvProgram> <playTime>2016-9-5 16:22</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>H:video 1网络电视精灵.avi</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 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>
需要的类:
频道父类:
namespace Chap08 { /// <summary> /// 电视频道的父类 /// </summary> public abstract class ChannelBase { //频道名称 public string Name { get; set; } //频道的路径 public string Path { get; set; } //节目列表,该频道内的所有节目列表 public List<TvProgram> TvList { get; set; } //加载所有的节目列表的方法 public abstract void Fetch(); } }
Tv类:
namespace Chap08 { /// <summary> /// 节目单类 /// </summary> public class TvProgram { //开播时间 public DateTime Time { get; set; } //时间档 public string Timelots { get; set; } //节目名称 public string Name { get; set; } //路径 public string Path { get; set; } } }
Load事件加载:
private void FrmMain_Load(object sender, EventArgs e) { //初始化根节点 TreeNode tn = new TreeNode("我的电视台"); // tn.ImageIndex = 0; tv01.Nodes.Add(tn); //初始化根节点 tn = new TreeNode("所有电台"); tn.ImageIndex = 0; tv01.Nodes.Add(tn); //MessageBox.Show(a.ToString()); doc = new XmlDocument(); doc.Load("FullChannels.xml"); root = doc.DocumentElement; //加载电视频道 foreach (XmlNode item in root.ChildNodes) { tn.ImageIndex = 1; tv01.Nodes[1].Nodes.Add(item["tvChannel"].InnerText); } }
方法和类:
namespace Chap08 { //类型A 的电视频道 子类 public class TypeAChannel : ChannelBase { public override void Fetch() { } } }
TypeA:
//加载北京电视台的方法 List<TvProgram> AList = new List<TvProgram>(); public void AFun() { XmlDocument doc = new XmlDocument(); doc.Load("北京电视台.xml"); XmlNode root = doc.DocumentElement; if (AList == null) { AList = new List<TvProgram>(); } foreach (XmlNode item in root.ChildNodes) { if (item.Name == "tvProgramTable") { foreach (XmlNode child in item.ChildNodes) { TvProgram tv = new TvProgram(); tv.Time = DateTime.Parse(child["playTime"].InnerText); tv.Timelots = child["meridien"].InnerText; tv.Name = child["programName"].InnerText; tv.Path = child["path"].InnerText; AList.Add(tv); } dgvList.DataSource = AList; } } }
TypeB:
namespace Chap08 { //类型B 的电视频道 子类 public class TypeBChannel : ChannelBase { public override void Fetch() { } } }
//加载凤凰卫视节目的方法 List<TvProgram> BList = new List<TvProgram>(); public void BFun() { XmlDocument doc = new XmlDocument(); doc.Load("凤凰卫视.xml"); XmlNode root = doc.DocumentElement; if (BList == null) { BList = new List<TvProgram>(); } foreach (XmlNode item in root.ChildNodes) { if (item.Name == "ProgramList") { foreach (XmlNode child in item.ChildNodes) { TvProgram tv = new TvProgram(); tv.Time = DateTime.Parse(child["playTime"].InnerText); tv.Name = child["name"].InnerText; tv.Path = child["path"].InnerText; BList.Add(tv); } } dgvList.DataSource = BList; } }
TreeView选择:
private void tv01_AfterSelect(object sender, TreeViewEventArgs e) { if (tv01.SelectedNode.Text == "北京电视台") { AFun(); } else if (tv01.SelectedNode.Text == "凤凰卫视") { BFun(); } else { List<TvProgram> list = new List<TvProgram>(); dgvList.DataSource = list; } if (tv01.SelectedNode.Level == 0) { cms01.Items[0].Visible = false; cms01.Items[1].Visible = false; } else if (tv01.SelectedNode.Parent.Text == "我的电视台") { cms01.Items[0].Visible = false; cms01.Items[1].Visible = true; } else if (tv01.SelectedNode.Parent.Text == "所有电台") { cms01.Items[1].Visible = false; cms01.Items[0].Visible = true; } }
加入我的电台:
private void toolStripMenuItem3_Click(object sender, EventArgs e) { foreach (XmlNode item in root.ChildNodes) { if (item["tvChannel"].InnerText == tv01.SelectedNode.Text) { tv01.Nodes[0].Nodes.Add(item["tvChannel"].InnerText); break; } } }
删除:
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) { foreach (XmlNode item in root.ChildNodes) { if (item["tvChannel"].InnerText == tv01.SelectedNode.Text) { tv01.SelectedNode.Remove(); break; } } }
播放:
private void 播放ToolStripMenuItem_Click(object sender, EventArgs e) { FrmPlay play = new FrmPlay(); play.Path =dgvList.SelectedRows[0].Cells[3].ToString(); play.Show(); }