国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

C#暢談“網(wǎng)絡(luò)電視”

2019-11-14 15:55:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

C#暢談“網(wǎng)絡(luò)電視”

以上是大家比較喜歡的網(wǎng)絡(luò)電視軟件,例如:PPTV,BOX央視影音,PPS等。

今天我就和大家來(lái)聊一下簡(jiǎn)單的“網(wǎng)絡(luò)電視”。雖然和上邊的軟件沒(méi)發(fā)比,但是正在向著這個(gè)目標(biāo)努力中……

 

一開(kāi)始我在做這個(gè)項(xiàng)目的時(shí)候思路很茫然,就像地上的一團(tuán)線(xiàn)團(tuán)一樣。

我需要用到哪些方法?需要建幾個(gè)類(lèi)?

拿到一個(gè)項(xiàng)目的時(shí)候首先要分析我想大家都知道

主界面如下:

既然是網(wǎng)絡(luò)電視,那么肯定有很多的頻道供用戶(hù)去選擇。所以肯定有頻道類(lèi),要定義一個(gè)頻道的基類(lèi)(ChannelBase),讓所有頻道類(lèi)繼承這個(gè)基類(lèi),提高抽象程度會(huì)更方便一些。

頻道管理類(lèi)(ChannelManager)也是必不可少的,要不怎么去管理那么多的頻道呢!

選擇頻道,頻道下面就會(huì)有節(jié)目,節(jié)目類(lèi)也隨之而來(lái)。

這里我定義了兩個(gè)頻道類(lèi)(TypeAChannel類(lèi),TypeBChannel類(lèi)),關(guān)系如下:

1 public class TypeAChannel:ChannelBase
1 public class TypeBChannel:ChannelBase

 

頻道基類(lèi)(ChannelBase)代碼如下:

 1 //頻道基類(lèi) 2     public abstract class ChannelBase 3     { 4         //頻道名稱(chēng) 5         public string ChannelName { get; set; } 6         //頻道路徑 7         public string Path { get; set; } 8         //節(jié)目列表,該頻道上的所有節(jié)目列表 9         public List<TvPRogram> TvList { get; set; }10         //獲取頻道列表:通過(guò)Fetch方法獲取該頻道擁有的所有節(jié)目列表11         public abstract void Fetch();12         //頻道類(lèi)型13         public string Type { get; set; }14     }

 

節(jié)目類(lèi)(TvProgram)代碼如下:

 1 //節(jié)目類(lèi) 2     public class TvProgram 3     { 4         //播出時(shí)間 5         public DateTime PlayTime { get; set; } 6         //早間檔,午間檔,晚間檔 7         public string Shiduan { get; set; } 8         //節(jié)目名稱(chēng) 9         public string ProgramName { get; set; }10         //視頻路徑11         public string Path { get; set; }12     }

 

接下來(lái)可以著手綁定treeView了。

首先先添加根節(jié)點(diǎn):

 1         private void LoadRootNode()  2         { 3             TreeNode mineNode = new TreeNode(); 4             mineNode.Text = "我的電視臺(tái)"; 5  6             allNode.Text = "所有電視臺(tái)"; 7  8             treeView1.Nodes.Add(mineNode); 9             treeView1.Nodes.Add(allNode);10         }

 

treeView里代碼如下:

 1 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 2         { 3             TreeNode selectNode = treeView1.SelectedNode; 4             if (selectNode.Level==1 && selectNode.Parent.Text=="所有電視臺(tái)") 5             { 6                 ChannelBase channel = (ChannelBase)selectNode.Tag; 7                 channel.Fetch(); 8  9                 List<TvProgram> ProList = channel.TvList;10                 dataGridView1.DataSource = ProList;11             }12         }

 

 

接下來(lái)把LoadRootNode()方法在Load中調(diào)用一下:

 1 private void Form1_Load(object sender, EventArgs e) 2         { 3             LoadRootNode(); 4             ChannelManager manager = new ChannelManager(); 5             manager.Paresexml(); 6             Dictionary<string,ChannelBase> dic=manager.FullChannel; 7             foreach (var channel in dic.Values) 8             { 9                 TreeNode tn = new TreeNode();10                 tn.Text = channel.ChannelName;11                 tn.Tag = channel;12                 allNode.Nodes.Add(tn);13             }14         }

 

到這里treeView已經(jīng)綁定完成了,那么我上邊是不是犯了一個(gè)小錯(cuò)誤呢?會(huì)導(dǎo)致什么后果?

 

沒(méi)錯(cuò),相信大家都猜到了,我在調(diào)用Fetch()方法之前,節(jié)目列表沒(méi)有清除,可以用下面的方法:

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

 

正確的代碼如下:

 1 private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) 2         { 3             TreeNode selectNode = treeView1.SelectedNode; 4             if (selectNode.Level==1 && selectNode.Parent.Text=="所有電視臺(tái)") 5             { 6                 ChannelBase channel = (ChannelBase)selectNode.Tag; 7                 if (channel.TvList != null) 8                 { 9                     channel.TvList.Clear();10                 }11                 channel.Fetch();12 13                 List<TvProgram> ProList = channel.TvList;14                 dataGridView1.DataSource = ProList;15             }16         }

 

頻道管理類(lèi):

 1 //頻道管理類(lèi) 2     public class ChannelManager 3     { 4         public ChannelManager() 5         { 6             fullChannel = new Dictionary<string, ChannelBase>(); 7         } 8  9         private Dictionary<string, ChannelBase> fullChannel = new Dictionary<string, ChannelBase>();10         public Dictionary<string, ChannelBase> FullChannel11         {12             get { return fullChannel; }13             set { fullChannel = value; }14         }15         public void PareseXML() 16         {17             XmlDocument doc = new XmlDocument();18             doc.Load("FullChannels.xml");19             XmlNode root = doc.DocumentElement;20             foreach (XmlNode node in root.ChildNodes)21             {22                 string type = node["channelType"].InnerText;23                 ChannelBase channel = ChannelFactory.CreatChannel(type);24                 channel.ChannelName = node["tvChannel"].InnerText;25                 channel.Path = node["path"].InnerText;26                 channel.Type = type;27 28                 fullChannel.Add(channel.ChannelName,channel);29             }30         }31     }

 

這里列舉一個(gè)頻道TypeAChannel類(lèi):

 1 //A頻道類(lèi) 2     public class TypeAChannel:ChannelBase 3     { 4         //多態(tài),覆蓋父類(lèi)的獲取頻道列表方法 5         public override void Fetch() 6         { 7             XmlDocument doc = new XmlDocument(); 8             doc.Load("北京電視臺(tái).xml"); 9             if (TvList == null)10             {11                 TvList = new List<TvProgram>();12             }13             //獲取根節(jié)點(diǎn)14             XmlNode root = doc.DocumentElement;15             foreach (XmlNode item in root.ChildNodes)16             {17                 if (item.Name == "tvProgramTable")18                 {19                     foreach (XmlNode child in item.ChildNodes)20                     {21                         //一個(gè)item就是一個(gè)tvProgram節(jié)點(diǎn)22                         TvProgram program = new TvProgram();23                         program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);24                         program.Shiduan = child["meridien"].InnerText;25                         program.ProgramName = child["programName"].InnerText;26                         program.Path = child["path"].InnerText;27                         TvList.Add(program);28                     }29                 }30             }31         }32     }

 

頻道TypeBChannel類(lèi)和TypeAChannel類(lèi)一樣。

至此基本功能已經(jīng)完成,那么接下來(lái)大家也可以接著制作如下功能:

右鍵我的電視臺(tái)下的頻道會(huì)只有刪除選項(xiàng),右鍵所有電視臺(tái)會(huì)只有加入我的電臺(tái)選項(xiàng)。

那么還有提醒功能,就是用戶(hù)可以設(shè)一個(gè)時(shí)間點(diǎn),到時(shí)間了會(huì)提醒用戶(hù)去收看,有興趣的可以研究一下。

 


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永昌县| 诏安县| 贵州省| 中卫市| 纳雍县| 岱山县| 德庆县| 城固县| 宿松县| 彩票| 沭阳县| 西乌珠穆沁旗| 卢龙县| 泾川县| 陵水| 淅川县| 浪卡子县| 旌德县| 富宁县| 河南省| 兴安县| 遂昌县| 友谊县| 江城| 盖州市| 慈利县| 扶余县| 武鸣县| 通州区| 阿尔山市| 柞水县| 垦利县| 阿克苏市| 吉安县| 思茅市| 巴林左旗| 读书| 莱西市| 乌拉特前旗| 宜黄县| 侯马市|