电视Smart
网络TVSmart,c#网络TVSmart
TVSmart
功效呈现
该品种重点练习xml文件分析和面向对象思维;
一.广播台湖剧目音讯都要从xml文件中分析,并绑定;
二.兑现点击电录制道节点展现该频道的TV节目消息;
三.当日子到达用户安装的剧目提示时间后弹出窗口提示用户节目即将初步;
作用演示
1.点击频道突显该频道的节目音讯
【亚洲必赢官网】互联网电视机Smart。 二.选中全体电台下的节点,右键展现右键菜单‘添加到作者的电台’;
3.选中笔者的广播台下的节点,右键展现右键菜单‘删除’;
四:右键电视机节目音信呈现设置提醒
五.点击提醒管理彰显提示窗体,右键提醒消息突显删除
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>
2.上视
<?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\01网络电视精灵.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>
代码:
1.频道类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
public abstract class ChannelBase
{
/// <summary>
/// 频道类
/// </summary>
///
//频道名称
public string Name { get; set; }
//频道节目集合
public List<TV> List { get; set; }
//频道xml地址
public string Path { get; set; }
//频道类型
public string Type { get; set; }
public ChannelBase(string name,string path,string type)
{
this.Name = name;
this.Path = path;
this.Type = type;
this.List = new List<TV>();
}
public ChannelBase()
{
}
public abstract void Fetch();
}
}
2.TV类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
public class TV
{
/// <summary>
/// 电视节目类
/// </summary>
///
//节目开始时间
public DateTime PlayTime { get; set; }
//节目名称
public string ProgramName { get; set; }
//节目地址
public string FilePath { get; set; }
public TV()
{
}
public TV( DateTime playtime,string name,string filepath)
{
this.PlayTime = playtime;
this.ProgramName = name;
this.FilePath = filepath;
}
}
}
3.工厂类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
class Factory
{
/// <summary>
/// 工厂类
/// </summary>
/// <param name="type"></param>
/// <param name="name"></param>
/// <param name="path"></param>
/// <returns></returns>
//简单工厂方法生成频道对象
public static ChannelBase create(string type, string name, string path)
{
ChannelBase cb = null;
switch (type)
{
case "TypeA":
cb = new BJ(name, path,type);
break;
case "TypeB":
cb = new FH(name, path,type);
break;
}
return cb;
}
}
}
4.管理类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class Management
{
//提醒类的静态集合,用于保存添加的提醒
public static List<Remind> Rlist = new List<Remind>();
//管理类方法,处理xml文件,返回处理后的频道对象的集合
public static List<ChannelBase> load()
{
List<ChannelBase> List = new List<ChannelBase>();
XmlDocument dic = new XmlDocument();
dic.Load("files\\FullChannels.xml");
XmlNode root = dic.DocumentElement;
foreach (XmlNode item in root)
{
ChannelBase cb=Factory.create(item["channelType"].InnerText,item["tvChannel"].InnerText,item["path"].InnerText);
cb.Fetch();
List.Add(cb);
}
return List;
}
//向提醒类集合添加对象的方法
public static bool remind(DateTime playtime, string ProgramName,DateTime reminddatetime)
{
bool flag =true;
foreach (Remind item in Rlist)
{
if (item.ProgramName == ProgramName && item.Reminddatetime == reminddatetime)
{
flag = false;
}
}
if (flag)
{
Remind r = new Remind(playtime, ProgramName, reminddatetime);
Management.Rlist.Add(r);
}
return flag;
}
}
}
伍.法国巴黎电台类
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class BJ:ChannelBase
{
/// <summary>
/// 北京电视台类
/// </summary>
public BJ()
{
}
public BJ(string name, string path,string type)
: base(name,path,type)
{
}
//解析北京电视台xml文件方法
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNode no = doc.DocumentElement;
foreach (XmlNode item in no)
{
if (item.Name == "tvProgramTable")
{
foreach (XmlNode it in item)
{
TV tv = new TV(Convert.ToDateTime(it["playTime"].InnerText), it["programName"].InnerText, it["path"].InnerText);
this.List.Add(tv);
}
}
}
}
}
}
六.凤凰香港卫星电视机有限公司类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class FH:ChannelBase
{
/// <summary>
/// 凤凰卫视类
/// </summary>
public FH()
{
}
public FH(string name,string path,string type)
: base(name,path,type)
{
}
//解析凤凰卫视xml文件的方法
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNode no = doc.DocumentElement;
foreach (XmlNode item in no.ChildNodes)
{
foreach (XmlNode it in item)
{
TV tv = new TV(Convert.ToDateTime(it["playTime"].InnerText),it["name"].InnerText,it["path"].InnerText);
this.List.Add(tv);
}
}
}
}
}
7.提醒类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
class Remind:TV
{
/// <summary>
/// 提醒类
/// </summary>
///
//提醒时间
public DateTime Reminddatetime { get; set; }
public Remind()
{
}
public Remind(DateTime playtime, string ProgramName, DateTime reminddatetime)
{
this.PlayTime = playtime;
this.ProgramName = ProgramName;
this.Reminddatetime = reminddatetime;
}
}
}
8.主窗体代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 网络电视精灵
{
public partial class TvShow : Form
{
TreeNode root = null;
public static Remindmg rmg;
public TvShow()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//创建根节点
dataGridView1.AutoGenerateColumns = false;
root = new TreeNode("我的电视台");
tree.Nodes.Add(root);
info();
}
//创建所有电视台的方法
private void info()
{
TreeNode tn = new TreeNode("所有电视台");
tree.Nodes.Add(tn);
List<ChannelBase> list = Management.load();
foreach (ChannelBase item in list)
{
item.Fetch();
TreeNode tn1 = new TreeNode(item.Name);
tn1.Tag = item;
tn.Nodes.Add(tn1);
}
}
private void tree_AfterSelect(object sender, TreeViewEventArgs e)
{
//显示右键菜单的方法
if (tree.SelectedNode.Tag != null)
{
dataGridView1.DataSource = ((ChannelBase)tree.SelectedNode.Tag).List;
}
foreach (TreeNode item in tree.Nodes)
{
foreach (TreeNode item1 in item.Nodes)
{
if (item1.Parent.Text == tree.Nodes[0].Text && item1 == tree.SelectedNode)
{
tree.ContextMenuStrip = contextMenuStrip1;
}
else if (item1.Parent.Text == tree.Nodes[1].Text && item1 == tree.SelectedNode)
{
tree.ContextMenuStrip = contextMenuStrip2;
}
else if (item == tree.SelectedNode)
{
tree.ContextMenuStrip = null;
}
}
}
}
private void tree_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
}
private void 加入我的电视台ToolStripMenuItem_Click(object sender, EventArgs e)
{
//将频道加入我的我的电视台的方法
bool flag = true;
foreach (TreeNode item in tree.Nodes[0].Nodes)
{
if (item.Text == tree.SelectedNode.Text)
{
flag = false;
}
}
if (flag)
{
TreeNode tn = new TreeNode(tree.SelectedNode.Text);
tn.Tag = tree.SelectedNode.Tag;
root.Nodes.Add(tn);
}
else
{
MessageBox.Show("已经添加到我的电视了","提示");
}
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
//删除我的频道的方法
tree.SelectedNode.Remove();
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
//添加播放时提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
Add(Remind);
}
private void Add(DateTime Remind)
{
//添加提醒的方法
DateTime playdatime = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
string name = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
if (Management.remind(playdatime, name, Remind))
{
MessageBox.Show("添加成功", "提示");
updateRmg();
}
else
{
MessageBox.Show("添加失败,已经添加过该提醒了", "提示");
}
}
//更新提醒列表的方法
public void updateRmg()
{
if (rmg != null)
{
rmg.Remindmginfo();
}
}
private void 提前十分钟提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
//提前十分钟提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value).AddMinutes(-10);
Add(Remind);
}
private void 提前三十分钟提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
//提前三十分钟提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value).AddMinutes(-30);
Add(Remind);
}
private void timer1_Tick(object sender, EventArgs e)
{
//到时提醒的方法
string time=DateTime.Now.ToString("yyyy-MM-dd hh:mm");
Remind r = null;
foreach (Remind item in Management.Rlist)
{
if ((item.Reminddatetime.ToString("yyyy-MM-dd hh:mm")).Equals(time))
{
MessageBox.Show(item.ProgramName+"马上就要开始了","提示",MessageBoxButtons.OK);
r = item;
}
}
if (r != null)
{
Management.Rlist.Remove(r);
updateRmg();
}
}
private void 提醒管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
//点击提醒管理打开提醒窗体
Remindmg from = new Remindmg();
from.Show();
}
}
}
九.提醒窗体代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 网络电视精灵
{
public partial class Remindmg : Form
{
public Remindmg()
{
InitializeComponent();
}
private void Remindmg_Load(object sender, EventArgs e)
{
//设置不显示未绑定的列
dataGridView1.AutoGenerateColumns = false;
//获取提醒窗体对象
TvShow.rmg = this;
Remindmginfo();
}
//绑定数据源
public void Remindmginfo()
{
BindingSource bs = new BindingSource();
bs.DataSource = Management.Rlist;
dataGridView1.DataSource = bs;
}
//删除的方法
private void 删除提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count > 0)
{
Remind r = null;
string name = dataGridView1.SelectedRows[0].Cells["ProgramName"].Value.ToString();
string datetime = dataGridView1.SelectedRows[0].Cells["remindtime"].Value.ToString();
foreach (Remind item in Management.Rlist)
{
if (item.ProgramName == name && item.Reminddatetime.ToString().Equals(datetime))
{
r = item;
}
}
if (r != null
)
{
Management.Rlist.Remove(r);
Remindmginfo();
}
}
}
}
}
TVSmart 效果体现该项目根本练习xml文件分析和面向对象思维;
1.广播台和节目音讯都要从xml文件中解析…
TVSmart
互联网电视机Smart
意义呈现
功用体现
职分描述
- 解析XML文件中的数据
多少个简易的xml文件;
<?xml version="1.0" encoding="utf-8" ?><TVChannele> <Channel> <channelType>TypeA</channelType> <tvChannel>北京电视台</tvChannel> <path>files/北京电视台.xml</path> </Channel> <Channel> <channelType>TypeB</channelType> <tvChannel>凤凰卫视</tvChannel> <path>files/凤凰卫视.xml</path> </Channel></TVChannele>
FullChannels
<?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>E:\</path><!--节目视频的本地路径--> </tvProgram> <tvProgram> <playTime>2013-9-29 07:00</playTime> <!--节目播出时间--> <meridien>早间档</meridien> <!--时段--> <programName>北京您早</programName> <!--节目名称--> <path>E:\</path> <!--节目视频的本地路径--> </tvProgram> <tvProgram> <playTime>2013-9-29 09:02</playTime> <!--节目播出时间--> <meridien>早间档</meridien> <!--时段--> <programName>重播:《红星剧场》32集剧:勇者无敌</programName> <!--节目名称--> <path>E:\</path> <!--节目视频的本地路径--> </tvProgram> </tvProgramTable></typeA>
京师广播台.xml
<?xml version="1.0" encoding="utf-8" ?><typeB version ="1.0"> <channelName>凤凰电视台</channelName> <!--电视台--> <tvProgramTable> <tvProgram> <playTime>2013-9-29 01:30</playTime> <!--节目播出时间--> <meridien>早间档</meridien> <!--时段--> <programName>重播:国际双行线</programName> <!--节目名称--> <path>E:\</path> <!--节目视频的本地路径--> </tvProgram> </tvProgramTable></typeB>
凤凰香港卫星电视机有限公司.xml
- 将”FullChannels.xml”文件中持有的频段添加到窗体的TreeView控件中.
3.
在TreeView控件中选取频道,将该频道的剧目列表显示在窗体的DataGrideView控件中.
该项目根本练习xml文件分析和面向对象思维;
该项目重点演练xml文件分析和面向对象思维;
种类框架的搭建
浅析网络Smart的大约结构,创建对应的类
- 创造对应的类
ChannelFactory:通过简单工厂创设频道子类
public class ChannelFactory { //通过工厂创建频道子类 public static ChannelBase CreateChannel(string type) { ChannelBase channel = null; switch { case "TypeA": channel=new TypeAChannel(); break; case "TypeB": channel = new TypeBChannel(); break; default: break; } return channel; } }
ChannelFactory
ChannelManager:解析”
FullChannels.xml”文件,创制存储全体频道音信的聚集,并将频道名添加到TreeView控件中
壹.广播台和节目音讯都要从xml文件中剖析,并绑定;
1.广播台黄岩乱弹目新闻都要从xml文件中分析,并绑定;
核心情路
- 创设了道管理类,添加多个加载全部频道音讯的章程LoadAllChannel()
当大家采用某壹节点时实际获得到的是该节点Text值对应的频段对象.所以使用Dctionary<>来囤积全数的频道对象
public ChannelManager() { fullChannels = new Dictionary<string, ChannelBase>(); } //定义一个容器,承载所有的频道集合(Key:频道名称 Value:频道对象) private Dictionary<string, ChannelBase> fullChannels ; public Dictionary<string, ChannelBase> FullChannels { get { return fullChannels; } set { fullChannels = value; } }
fullChannels
二.
接下去正是给窗体中的TreeView控件中添加多少,分析:通过foreach将字典中的集合数据拆解,每一项对应的就是三个TreeNode对象,我们要求的是向”全部电视台”节点下添加广播台的名目属性.而名称属性对应的正是二个Channel对象,大家用Tag属性存款和储蓄.
//01.写一个方法来解析xml,并且来给箱子中装数据 public void ParseXmlToDictionary() { XmlDocument doc=new XmlDocument(); doc.Load("files/Fullchannels.xml"); //获取根节点 XmlNode root=doc.DocumentElement; foreach (XmlNode item in root.ChildNodes) { //一个item代表一个Channel节点 //获取类型 string type=item["channelType"].InnerText; ChannelBase channel= ChannelFactory.CreateChannel; //名称 channel.ChannelName = item["tvChannel"].InnerText; channel.Path = item["path"].InnerText; channel.Type = type; fullChannels.Add(channel.ChannelName,channel); } }
ParseXmlToDictionary
private void FrmMain_Load(object sender, EventArgs e) { //将ChannelManage类当中的容器FullChannels中的数据拎到TreeView上, //根据思路,集合中每一项的Value值都是一个频道对应,没遍历到一个 //频道对象,我们就形成TV上的一个TreeNode //01.加载根节点的方法 LoadRootNode(); //02.将集合中的数据拆解成是“所有电台下的”多个子节点 ChannelManager manager=new ChannelManager(); manager.ParseXmlToDictionary(); Dictionary<string,ChannelBase> dic=manager.FullChannels; foreach (var channel in dic.Values) { //转化过程 TreeNode tn=new TreeNode(); tn.Text = channel.ChannelName; tn.Tag = channel; //让tn加到所有电台下 allNode.Nodes.Add; } }
节点指标的绑定
三.
将近日入选的广播台的剧目列表突显在dgv(DataGrideView)中显示出来,只须求将dgv的datasource属性设为当前选中电台的剧目列表list<Progeram>即可.
(我们在选取节点时应掌握一件事,在大家点击节点已收获到该广播台的剧目列表,获撤消息应该生出在大家点击节点的时候仍然应该发生在接纳之后)
private void tvChannel_AfterSelect(object sender, TreeViewEventArgs e) { //01.获取到用户选择的节点 TreeNode selectedNode = tvChannel.SelectedNode; if (selectedNode.Level==1&&selectedNode.Parent.Text=="所有电视台") { ChannelBase channel = (ChannelBase)selectedNode.Tag; //清集合 if (channel.TvList!=null) { channel.TvList.Clear(); } channel.Fetch(); List<TvProgram> proList = channel.TvList; dgvProgList.DataSource = proList; } }
tvChannel_AfterSelect
写到那里,倘使运行一下先后,会报错误
.
大家密切回顾一下,大家在给TreeView控件添加节点的时候,给节点的TAG属性绑定了实际的频段对象.可是TreeView在窗体显示前,第3个节点会被暗中同意选中
据此大家要对其进行优化,也等于当窗体在开辟时,对暗中同意选项的节点经行判断
if (selectedNode.Level==1&&selectedNode.Parent.Text=="所有电视台")
私下认可选项节点判断
我们会意识当大家壹再点击同1电台,该电台的剧目音讯会在dgv中开始展览频仍抬高,所以举行以下处理
//清集合 if (channel.TvList!=null) { channel.TvList.Clear(); }
理清节目列表
四.
节点右键菜单的丰裕,在TreeView控件中差别的节点对应了分化的右键菜单,当我们点击”笔者的广播台”下的字节点时,右键菜单只可以为除去,而当自家点击”全数电台”下的子节点时,右键菜单为抬高到”笔者的广播台”和”删除,固然大家应用八个ContextMenuStrip对两样节点经行绑定,会导致冗余,大家好不好行使三个ContextMenuStrip绑定到多个节点并使其出示不相同的菜单呢?答案是一定的,大家必要用到ContextMenuStrip的三天品质:Visible.
咱俩要在选拔节点后对接纳到的节点经行判断,并选择展现该节点的右键菜单项
if (tvAllChannel.SelectedNode.Level == 1 && tvAllChannel.SelectedNode.Parent.Text == "所有电视台") { ctxAddToMyChannels.Items[2].Visible = false; ctxAddToMyChannels.Items[3].Visible = false; } else if (tvAllChannel.SelectedNode.Level == 1 && tvAllChannel.SelectedNode.Parent.Text == "我的电视台") { ctxAddToMyChannels.Items[0].Visible = false; ctxAddToMyChannels.Items[1].Visible = false; ctxAddToMyChannels.Items[2].Visible = false; } else if (tvAllChannel.SelectedNode.Text == "所有电视台") { ctxAddToMyChannels.Items[0].Visible = false; ctxAddToMyChannels.Items[1].Visible = false; ctxAddToMyChannels.Items[3].Visible = false;
节点右键菜单项
到了此处,这么些小品种方可说已经结束,之后学习过IO流会继续对该项目进展优化.恐怕作者所做的并不完美,存在着无数代码的复用和冗余,也指望看过的各位实行提点,帮助自身收获越多更优的消除方案.小子在此先行谢过了~~~
2.达成点击电录制道节点展现该频道的TV节目消息;
二.落实点击TV频道节点展现该频道的电视机节目音信;
三.当时光到达用户设置的剧目提示时间后弹出窗口提示用户节目即将先河;
三.当时间到达用户设置的剧目提示时间后弹出窗口提醒用户节目即将起初;
功效演示
职能演示
一.点击频道彰显该频道的剧目音讯
一.点击频道彰显该频道的节目音信
2.选中全部广播台下的节点,右键显示右键菜单‘添加到作者的电台’;
二.选中全部电台下的节点,右键呈现右键菜单‘添加到小编的电台’;
叁.选中自笔者的电台下的节点,右键展现右键菜单‘删除’;
三.选中本身的广播台下的节点,右键突显右键菜单‘删除’;
肆:右键TV节目音讯彰显设置提醒
4:右键TV节目新闻体现设置提醒
5.点击提醒管理展现提示窗体,右键提示音信显示删除
五.点击提示管理突显提醒窗体,右键提醒音信展现删除
xml文件
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" ?>
<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\01网络电视精灵.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" ?>
<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\01网络电视精灵.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>
三.凤凰香港卫星电视有限公司
三.凤凰香港卫星TV有限公司
<?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>
<?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>
代码:
代码:
1.频道类
1.频道类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
public abstract class ChannelBase
{
/// <summary>
/// 频道类
/// </summary>
///
//频道名称
public string Name { get; set; }
//频道节目集合
public List<TV> List { get; set; }
//频道xml地址
public string Path { get; set; }
//频道类型
public string Type { get; set; }
public ChannelBase(string name,string path,string type)
{
this.Name = name;
this.Path = path;
this.Type = type;
this.List = new List<TV>();
}
public ChannelBase()
{
}
public abstract void Fetch();
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
public abstract class ChannelBase
{
/// <summary>
/// 频道类
/// </summary>
///
//频道名称
public string Name { get; set; }
//频道节目集合
public List<TV> List { get; set; }
//频道xml地址
public string Path { get; set; }
//频道类型
public string Type { get; set; }
public ChannelBase(string name,string path,string type)
{
this.Name = name;
this.Path = path;
this.Type = type;
this.List = new List<TV>();
}
public ChannelBase()
{
}
public abstract void Fetch();
}
}
2.TV类
2.TV类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
public class TV
{
/// <summary>
/// 电视节目类
/// </summary>
///
//节目开始时间
public DateTime PlayTime { get; set; }
//节目名称
public string ProgramName { get; set; }
//节目地址
public string FilePath { get; set; }
public TV()
{
}
public TV( DateTime playtime,string name,string filepath)
{
this.PlayTime = playtime;
this.ProgramName = name;
this.FilePath = filepath;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
public class TV
{
/// <summary>
/// 电视节目类
/// </summary>
///
//节目开始时间
public DateTime PlayTime { get; set; }
//节目名称
public string ProgramName { get; set; }
//节目地址
public string FilePath { get; set; }
public TV()
{
}
public TV( DateTime playtime,string name,string filepath)
{
this.PlayTime = playtime;
this.ProgramName = name;
this.FilePath = filepath;
}
}
}
亚洲必赢官网 ,3.工厂类
3.工厂类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
class Factory
{
/// <summary>
/// 工厂类
/// </summary>
/// <param name="type"></param>
/// <param name="name"></param>
/// <param name="path"></param>
/// <returns></returns>
//简单工厂方法生成频道对象
public static ChannelBase create(string type, string name, string path)
{
ChannelBase cb = null;
switch (type)
{
case "TypeA":
cb = new BJ(name, path,type);
break;
case "TypeB":
cb = new FH(name, path,type);
break;
}
return cb;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
class Factory
{
/// <summary>
/// 工厂类
/// </summary>
/// <param name="type"></param>
/// <param name="name"></param>
/// <param name="path"></param>
/// <returns></returns>
//简单工厂方法生成频道对象
public static ChannelBase create(string type, string name, string path)
{
ChannelBase cb = null;
switch (type)
{
case "TypeA":
cb = new BJ(name, path,type);
break;
case "TypeB":
cb = new FH(name, path,type);
break;
}
return cb;
}
}
}
4.管理类
4.管理类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class Management
{
//提醒类的静态集合,用于保存添加的提醒
public static List<Remind> Rlist = new List<Remind>();
//管理类方法,处理xml文件,返回处理后的频道对象的集合
public static List<ChannelBase> load()
{
List<ChannelBase> List = new List<ChannelBase>();
XmlDocument dic = new XmlDocument();
dic.Load("files\\FullChannels.xml");
XmlNode root = dic.DocumentElement;
foreach (XmlNode item in root)
{
ChannelBase cb=Factory.create(item["channelType"].InnerText,item["tvChannel"].InnerText,item["path"].InnerText);
cb.Fetch();
List.Add(cb);
}
return List;
}
//向提醒类集合添加对象的方法
public static bool remind(DateTime playtime, string ProgramName,DateTime reminddatetime)
{
bool flag =true;
foreach (Remind item in Rlist)
{
if (item.ProgramName == ProgramName && item.Reminddatetime == reminddatetime)
{
flag = false;
}
}
if (flag)
{
Remind r = new Remind(playtime, ProgramName, reminddatetime);
Management.Rlist.Add(r);
}
return flag;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class Management
{
//提醒类的静态集合,用于保存添加的提醒
public static List<Remind> Rlist = new List<Remind>();
//管理类方法,处理xml文件,返回处理后的频道对象的集合
public static List<ChannelBase> load()
{
List<ChannelBase> List = new List<ChannelBase>();
XmlDocument dic = new XmlDocument();
dic.Load("files\\FullChannels.xml");
XmlNode root = dic.DocumentElement;
foreach (XmlNode item in root)
{
ChannelBase cb=Factory.create(item["channelType"].InnerText,item["tvChannel"].InnerText,item["path"].InnerText);
cb.Fetch();
List.Add(cb);
}
return List;
}
//向提醒类集合添加对象的方法
public static bool remind(DateTime playtime, string ProgramName,DateTime reminddatetime)
{
bool flag =true;
foreach (Remind item in Rlist)
{
if (item.ProgramName == ProgramName && item.Reminddatetime == reminddatetime)
{
flag = false;
}
}
if (flag)
{
Remind r = new Remind(playtime, ProgramName, reminddatetime);
Management.Rlist.Add(r);
}
return flag;
}
}
}
五.法国巴黎电台类
5.新加坡广播台类
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class BJ:ChannelBase
{
/// <summary>
/// 北京电视台类
/// </summary>
public BJ()
{
}
public BJ(string name, string path,string type)
: base(name,path,type)
{
}
//解析北京电视台xml文件方法
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNode no = doc.DocumentElement;
foreach (XmlNode item in no)
{
if (item.Name == "tvProgramTable")
{
foreach (XmlNode it in item)
{
TV tv = new TV(Convert.ToDateTime(it["playTime"].InnerText), it["programName"].InnerText, it["path"].InnerText);
this.List.Add(tv);
}
}
}
}
}
}
sing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class BJ:ChannelBase
{
/// <summary>
/// 北京电视台类
/// </summary>
public BJ()
{
}
public BJ(string name, string path,string type)
: base(name,path,type)
{
}
//解析北京电视台xml文件方法
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNode no = doc.DocumentElement;
foreach (XmlNode item in no)
{
if (item.Name == "tvProgramTable")
{
foreach (XmlNode it in item)
{
TV tv = new TV(Convert.ToDateTime(it["playTime"].InnerText), it["programName"].InnerText, it["path"].InnerText);
this.List.Add(tv);
}
}
}
}
}
}
陆.凤凰香港卫星TV有限公司类
陆.凤凰香港卫星电视有限公司类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class FH:ChannelBase
{
/// <summary>
/// 凤凰卫视类
/// </summary>
public FH()
{
}
public FH(string name,string path,string type)
: base(name,path,type)
{
}
//解析凤凰卫视xml文件的方法
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNode no = doc.DocumentElement;
foreach (XmlNode item in no.ChildNodes)
{
foreach (XmlNode it in item)
{
TV tv = new TV(Convert.ToDateTime(it["playTime"].InnerText),it["name"].InnerText,it["path"].InnerText);
this.List.Add(tv);
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace 网络电视精灵
{
class FH:ChannelBase
{
/// <summary>
/// 凤凰卫视类
/// </summary>
public FH()
{
}
public FH(string name,string path,string type)
: base(name,path,type)
{
}
//解析凤凰卫视xml文件的方法
public override void Fetch()
{
XmlDocument doc = new XmlDocument();
doc.Load(Path);
XmlNode no = doc.DocumentElement;
foreach (XmlNode item in no.ChildNodes)
{
foreach (XmlNode it in item)
{
TV tv = new TV(Convert.ToDateTime(it["playTime"].InnerText),it["name"].InnerText,it["path"].InnerText);
this.List.Add(tv);
}
}
}
}
}
7.提醒类
7.提醒类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
class Remind:TV
{
/// <summary>
/// 提醒类
/// </summary>
///
//提醒时间
public DateTime Reminddatetime { get; set; }
public Remind()
{
}
public Remind(DateTime playtime, string ProgramName, DateTime reminddatetime)
{
this.PlayTime = playtime;
this.ProgramName = ProgramName;
this.Reminddatetime = reminddatetime;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 网络电视精灵
{
class Remind:TV
{
/// <summary>
/// 提醒类
/// </summary>
///
//提醒时间
public DateTime Reminddatetime { get; set; }
public Remind()
{
}
public Remind(DateTime playtime, string ProgramName, DateTime reminddatetime)
{
this.PlayTime = playtime;
this.ProgramName = ProgramName;
this.Reminddatetime = reminddatetime;
}
}
}
8.主窗体代码
8.主窗体代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 网络电视精灵
{
public partial class TvShow : Form
{
TreeNode root = null;
public static Remindmg rmg;
public TvShow()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//创建根节点
dataGridView1.AutoGenerateColumns = false;
root = new TreeNode("我的电视台");
tree.Nodes.Add(root);
info();
}
//创建所有电视台的方法
private void info()
{
TreeNode tn = new TreeNode("所有电视台");
tree.Nodes.Add(tn);
List<ChannelBase> list = Management.load();
foreach (ChannelBase item in list)
{
item.Fetch();
TreeNode tn1 = new TreeNode(item.Name);
tn1.Tag = item;
tn.Nodes.Add(tn1);
}
}
private void tree_AfterSelect(object sender, TreeViewEventArgs e)
{
//显示右键菜单的方法
if (tree.SelectedNode.Tag != null)
{
dataGridView1.DataSource = ((ChannelBase)tree.SelectedNode.Tag).List;
}
foreach (TreeNode item in tree.Nodes)
{
foreach (TreeNode item1 in item.Nodes)
{
if (item1.Parent.Text == tree.Nodes[0].Text && item1 == tree.SelectedNode)
{
tree.ContextMenuStrip = contextMenuStrip1;
}
else if (item1.Parent.Text == tree.Nodes[1].Text && item1 == tree.SelectedNode)
{
tree.ContextMenuStrip = contextMenuStrip2;
}
else if (item == tree.SelectedNode)
{
tree.ContextMenuStrip = null;
}
}
}
}
private void tree_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
}
private void 加入我的电视台ToolStripMenuItem_Click(object sender, EventArgs e)
{
//将频道加入我的我的电视台的方法
bool flag = true;
foreach (TreeNode item in tree.Nodes[0].Nodes)
{
if (item.Text == tree.SelectedNode.Text)
{
flag = false;
}
}
if (flag)
{
TreeNode tn = new TreeNode(tree.SelectedNode.Text);
tn.Tag = tree.SelectedNode.Tag;
root.Nodes.Add(tn);
}
else
{
MessageBox.Show("已经添加到我的电视了","提示");
}
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
//删除我的频道的方法
tree.SelectedNode.Remove();
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
//添加播放时提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
Add(Remind);
}
private void Add(DateTime Remind)
{
//添加提醒的方法
DateTime playdatime = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
string name = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
if (Management.remind(playdatime, name, Remind))
{
MessageBox.Show("添加成功", "提示");
updateRmg();
}
else
{
MessageBox.Show("添加失败,已经添加过该提醒了", "提示");
}
}
//更新提醒列表的方法
public void updateRmg()
{
if (rmg != null)
{
rmg.Remindmginfo();
}
}
private void 提前十分钟提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
//提前十分钟提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value).AddMinutes(-10);
Add(Remind);
}
private void 提前三十分钟提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
//提前三十分钟提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value).AddMinutes(-30);
Add(Remind);
}
private void timer1_Tick(object sender, EventArgs e)
{
//到时提醒的方法
string time=DateTime.Now.ToString("yyyy-MM-dd hh:mm");
Remind r = null;
foreach (Remind item in Management.Rlist)
{
if ((item.Reminddatetime.ToString("yyyy-MM-dd hh:mm")).Equals(time))
{
MessageBox.Show(item.ProgramName+"马上就要开始了","提示",MessageBoxButtons.OK);
r = item;
}
}
if (r != null)
{
Management.Rlist.Remove(r);
updateRmg();
}
}
private void 提醒管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
//点击提醒管理打开提醒窗体
Remindmg from = new Remindmg();
from.Show();
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 网络电视精灵
{
public partial class TvShow : Form
{
TreeNode root = null;
public static Remindmg rmg;
public TvShow()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//创建根节点
dataGridView1.AutoGenerateColumns = false;
root = new TreeNode("我的电视台");
tree.Nodes.Add(root);
info();
}
//创建所有电视台的方法
private void info()
{
TreeNode tn = new TreeNode("所有电视台");
tree.Nodes.Add(tn);
List<ChannelBase> list = Management.load();
foreach (ChannelBase item in list)
{
item.Fetch();
TreeNode tn1 = new TreeNode(item.Name);
tn1.Tag = item;
tn.Nodes.Add(tn1);
}
}
private void tree_AfterSelect(object sender, TreeViewEventArgs e)
{
//显示右键菜单的方法
if (tree.SelectedNode.Tag != null)
{
dataGridView1.DataSource = ((ChannelBase)tree.SelectedNode.Tag).List;
}
foreach (TreeNode item in tree.Nodes)
{
foreach (TreeNode item1 in item.Nodes)
{
if (item1.Parent.Text == tree.Nodes[0].Text && item1 == tree.SelectedNode)
{
tree.ContextMenuStrip = contextMenuStrip1;
}
else if (item1.Parent.Text == tree.Nodes[1].Text && item1 == tree.SelectedNode)
{
tree.ContextMenuStrip = contextMenuStrip2;
}
else if (item == tree.SelectedNode)
{
tree.ContextMenuStrip = null;
}
}
}
}
private void tree_NodeMouseHover(object sender, TreeNodeMouseHoverEventArgs e)
{
}
private void 加入我的电视台ToolStripMenuItem_Click(object sender, EventArgs e)
{
//将频道加入我的我的电视台的方法
bool flag = true;
foreach (TreeNode item in tree.Nodes[0].Nodes)
{
if (item.Text == tree.SelectedNode.Text)
{
flag = false;
}
}
if (flag)
{
TreeNode tn = new TreeNode(tree.SelectedNode.Text);
tn.Tag = tree.SelectedNode.Tag;
root.Nodes.Add(tn);
}
else
{
MessageBox.Show("已经添加到我的电视了","提示");
}
}
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
//删除我的频道的方法
tree.SelectedNode.Remove();
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
//添加播放时提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
Add(Remind);
}
private void Add(DateTime Remind)
{
//添加提醒的方法
DateTime playdatime = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
string name = dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
if (Management.remind(playdatime, name, Remind))
{
MessageBox.Show("添加成功", "提示");
updateRmg();
}
else
{
MessageBox.Show("添加失败,已经添加过该提醒了", "提示");
}
}
//更新提醒列表的方法
public void updateRmg()
{
if (rmg != null)
{
rmg.Remindmginfo();
}
}
private void 提前十分钟提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
//提前十分钟提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value).AddMinutes(-10);
Add(Remind);
}
private void 提前三十分钟提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
//提前三十分钟提醒
DateTime Remind = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value).AddMinutes(-30);
Add(Remind);
}
private void timer1_Tick(object sender, EventArgs e)
{
//到时提醒的方法
string time=DateTime.Now.ToString("yyyy-MM-dd hh:mm");
Remind r = null;
foreach (Remind item in Management.Rlist)
{
if ((item.Reminddatetime.ToString("yyyy-MM-dd hh:mm")).Equals(time))
{
MessageBox.Show(item.ProgramName+"马上就要开始了","提示",MessageBoxButtons.OK);
r = item;
}
}
if (r != null)
{
Management.Rlist.Remove(r);
updateRmg();
}
}
private void 提醒管理ToolStripMenuItem_Click(object sender, EventArgs e)
{
//点击提醒管理打开提醒窗体
Remindmg from = new Remindmg();
from.Show();
}
}
}
玖.指示窗体代码
玖.提示窗体代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 网络电视精灵
{
public partial class Remindmg : Form
{
public Remindmg()
{
InitializeComponent();
}
private void Remindmg_Load(object sender, EventArgs e)
{
//设置不显示未绑定的列
dataGridView1.AutoGenerateColumns = false;
//获取提醒窗体对象
TvShow.rmg = this;
Remindmginfo();
}
//绑定数据源
public void Remindmginfo()
{
BindingSource bs = new BindingSource();
bs.DataSource = Management.Rlist;
dataGridView1.DataSource = bs;
}
//删除的方法
private void 删除提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count > 0)
{
Remind r = null;
string name = dataGridView1.SelectedRows[0].Cells["ProgramName"].Value.ToString();
string datetime = dataGridView1.SelectedRows[0].Cells["remindtime"].Value.ToString();
foreach (Remind item in Management.Rlist)
{
if (item.ProgramName == name && item.Reminddatetime.ToString().Equals(datetime))
{
r = item;
}
}
if (r != null
)
{
Management.Rlist.Remove(r);
Remindmginfo();
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 网络电视精灵
{
public partial class Remindmg : Form
{
public Remindmg()
{
InitializeComponent();
}
private void Remindmg_Load(object sender, EventArgs e)
{
//设置不显示未绑定的列
dataGridView1.AutoGenerateColumns = false;
//获取提醒窗体对象
TvShow.rmg = this;
Remindmginfo();
}
//绑定数据源
public void Remindmginfo()
{
BindingSource bs = new BindingSource();
bs.DataSource = Management.Rlist;
dataGridView1.DataSource = bs;
}
//删除的方法
private void 删除提醒ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (dataGridView1.SelectedRows.Count > 0)
{
Remind r = null;
string name = dataGridView1.SelectedRows[0].Cells["ProgramName"].Value.ToString();
string datetime = dataGridView1.SelectedRows[0].Cells["remindtime"].Value.ToString();
foreach (Remind item in Management.Rlist)
{
if (item.ProgramName == name && item.Reminddatetime.ToString().Equals(datetime))
{
r = item;
}
}
if (r != null
)
{
Management.Rlist.Remove(r);
Remindmginfo();
}
}
}
}
}