分享
 
 
 

C#畅谈“网络电视”

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: |||超大  

C#畅谈“网络电视”

以上是大家比较喜欢的网络电视软件,例如:PPTV,BOX央视影音,PPS等。

今天我就和大家来聊一下简单的“网络电视”。虽然和上边的软件没发比,但是正在向着这个目标努力中……

一开始我在做这个项目的时候思路很茫然,就像地上的一团线团一样。

我需要用到哪些方法?需要建几个类?

拿到一个项目的时候首先要分析我想大家都知道

主界面如下:

既然是网络电视,那么肯定有很多的频道供用户去选择。所以肯定有频道类,要定义一个频道的基类(ChannelBase),让所有频道类继承这个基类,提高抽象程度会更方便一些。

频道管理类(ChannelManager)也是必不可少的,要不怎么去管理那么多的频道呢!

选择频道,频道下面就会有节目,节目类也随之而来。

这里我定义了两个频道类(TypeAChannel类,TypeBChannel类),关系如下:

1publicclassTypeAChannel:ChannelBase

1publicclassTypeBChannel:ChannelBase

频道基类(ChannelBase)代码如下:

1//频道基类2publicabstractclassChannelBase3{4//频道名称5publicstringChannelName {get;set; }6//频道路径7publicstringPath {get;set; }8//节目列表,该频道上的所有节目列表9publicList<TvPRogram> TvList {get;set; }10//获取频道列表:通过Fetch方法获取该频道拥有的所有节目列表11publicabstractvoidFetch();12//频道类型13publicstringType {get;set; }14}

节目类(TvProgram)代码如下:

1//节目类2publicclassTvProgram3{4//播出时间5publicDateTime PlayTime {get;set; }6//早间档,午间档,晚间档7publicstringShiduan {get;set; }8//节目名称9publicstringProgramName {get;set; }10//视频路径11publicstringPath {get;set; }12}

接下来可以着手绑定treeView了。

首先先添加根节点:

1privatevoidLoadRootNode()2{3TreeNode mineNode =newTreeNode();4mineNode.Text ="我的电视台";56allNode.Text ="所有电视台";78treeView1.Nodes.Add(mineNode);9treeView1.Nodes.Add(allNode);10}

treeView里代码如下:

1privatevoidtreeView1_AfterSelect(objectsender, TreeViewEventArgs e)2{3TreeNode selectNode =treeView1.SelectedNode;4if(selectNode.Level==1&& selectNode.Parent.Text=="所有电视台")5{6ChannelBase channel =(ChannelBase)selectNode.Tag;7channel.Fetch();89List<TvProgram> ProList =channel.TvList;10dataGridView1.DataSource =ProList;11}12}

接下来把LoadRootNode()方法在Load中调用一下:

1privatevoidForm1_Load(objectsender, EventArgs e)2{3LoadRootNode();4ChannelManager manager =newChannelManager();5manager.Paresexml();6Dictionary<string,ChannelBase> dic=manager.FullChannel;7foreach(varchannelindic.Values)8{9TreeNode tn =newTreeNode();10tn.Text =channel.ChannelName;11tn.Tag =channel;12allNode.Nodes.Add(tn);13}14}

到这里treeView已经绑定完成了,那么我上边是不是犯了一个小错误呢?会导致什么后果?

没错,相信大家都猜到了,我在调用Fetch()方法之前,节目列表没有清除,可以用下面的方法:

1if(channel.TvList !=null)2{3channel.TvList.Clear();4}

正确的代码如下:

1privatevoidtreeView1_AfterSelect(objectsender, TreeViewEventArgs e)2{3TreeNode selectNode =treeView1.SelectedNode;4if(selectNode.Level==1&& selectNode.Parent.Text=="所有电视台")5{6ChannelBase channel =(ChannelBase)selectNode.Tag;7if(channel.TvList !=null)8{9channel.TvList.Clear();10}11channel.Fetch();1213List<TvProgram> ProList =channel.TvList;14dataGridView1.DataSource =ProList;15}16}

频道管理类:

1//频道管理类2publicclassChannelManager3{4publicChannelManager()5{6fullChannel =newDictionary<string, ChannelBase>();7}89privateDictionary<string, ChannelBase> fullChannel =newDictionary<string, ChannelBase>();10publicDictionary<string, ChannelBase>FullChannel11{12get{returnfullChannel; }13set{ fullChannel =value; }14}15publicvoidPareseXML()16{17XmlDocument doc =newXmlDocument();18doc.Load("FullChannels.xml");19XmlNode root =doc.DocumentElement;20foreach(XmlNode nodeinroot.ChildNodes)21{22stringtype = node["channelType"].InnerText;23ChannelBase channel =ChannelFactory.CreatChannel(type);24channel.ChannelName = node["tvChannel"].InnerText;25channel.Path = node["path"].InnerText;26channel.Type =type;2728fullChannel.Add(channel.ChannelName,channel);29}30}31}

这里列举一个频道TypeAChannel类:

1//A频道类2publicclassTypeAChannel:ChannelBase3{4//多态,覆盖父类的获取频道列表方法5publicoverridevoidFetch()6{7XmlDocument doc =newXmlDocument();8doc.Load("北京电视台.xml");9if(TvList ==null)10{11TvList =newList<TvProgram>();12}13//获取根节点14XmlNode root =doc.DocumentElement;15foreach(XmlNode iteminroot.ChildNodes)16{17if(item.Name =="tvProgramTable")18{19foreach(XmlNode childinitem.ChildNodes)20{21//一个item就是一个tvProgram节点22TvProgram program =newTvProgram();23program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);24program.Shiduan = child["meridien"].InnerText;25program.ProgramName = child["programName"].InnerText;26program.Path = child["path"].InnerText;27TvList.Add(program);28}29}30}31}32}

频道TypeBChannel类和TypeAChannel类一样。

至此基本功能已经完成,那么接下来大家也可以接着制作如下功能:

右键我的电视台下的频道会只有删除选项,右键所有电视台会只有加入我的电台选项。

那么还有提醒功能,就是用户可以设一个时间点,到时间了会提醒用户去收看,有兴趣的可以研究一下。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有