北大青鳥網絡電視精靈代碼剖析


這篇文章的目的主要為了后續工作的使用,在這里對S2深入.NET平台和C#編程中貫穿案例《網絡電視精靈》的部分實現代碼進行思路剖析。

  一、項目框架的搭建:

   我們都知道開發一個項目之前,應該對項目的整體框架進行搭建。或者專業一點稱為詳細設計。解析來我們就來看下網絡電視精靈的大致結構,當然后續的功能可能還需要加入其它類。

 思路分析: 

1.創建對應的類

 

TvProgram:節目類

 

該類主要負責定義節目的屬性,為后續從xml文件中讀取的內容提供存放位置。

 

ChannelBase:頻道基類

 

TypeAChannelA類頻道

TypeBChannelB類頻道

 

ChannelFactory:工廠類

 

 

 

上述四個類主要控制頻道信息

 

ChannelManager:頻道管理類

 

該類主要作用實質上減輕窗體中的代碼量。相當於程序的工具類。

 

2013818

 

任務;加載所有的頻道信息,綁定到界面的TreeView

 

核心思路:

 

    1.首先在頻道管理類ChannelManager中寫一個加載所有頻道方法LoadAllChannel;

 

       該方法作用讀取FullChannels.xml文件,並且將讀取到的內容賦值給ChannelBase          對象。關鍵的問題就轉化成了如何創建一個ChannelBase對象。我們都知道ChannelBase本身是一個抽象類,無法創建實例。由此,我們想到可以通過其子類來創建對象。由於不同子類實例化需要多次new,我們單獨寫了一個工廠類(ChannelFafactory),來創建子類實例,但是該子類實例存儲在父類變量中。賦值完成后,我們需要將頻道對象添加到字典中。那么

 

LoadAllChannel方法結束后,字典中就有了XML文檔中的數據。也就是我們實現了將

 

本地硬盤上的xml文件中的數據讀取到了內存中的一個字典集合中。

 

2.將集合中的數據綁定到TreeView

將字典集合中的數據通過Foreach拆解,每循環一項,都創建一個TreeNode對象。

並且將集合中的屬性賦值給節點對應的屬性。然后將拼接處的節點添加到TreeView

。這里需要注意的是,如何找到TreeView控件中的【所有電視台】這個節點,因為

我們需要在該節點上添加頻道名稱。代碼如下:

2013821

擴展:DGV綁定List<T>

List<T> list=new  List<T>();

dgv.DataSource=new BindingList<T>(list);

 

任務:1.將頻道節目單填充到DataGridView

      2.實現TreeView的右鍵菜單功能(能添加電台和刪除電台)

      3.右鍵菜單控制

核心思路:

   將頻道節目單填充到DataGridView

     1.在對應的頻道子類中書寫Fetch方法,解析對應的頻道xml文件,然后將xml文件中的數據讀取到 public List<TvProgram>  TvList { get; set; }中。

    2.將TvList中的數據綁定到DataGridView上

 

實現TreeView的右鍵菜單功能(能添加電台和刪除電台)

  核心思路:

     1.添加電台

 

其實我們在做的事情就是先獲取所有電台的某一個電台(北京電視台),然后通過

Tag屬性拿到該電台對應的屬性,將拆解出來的屬性賦值給我的電台下的某一個

節點,由於節點不存在,所以我們要構造出一個節點。然后賦值,賦值完成后,我們就將構造出來的 節點添加到我的電台下就OK。

 

當然,上面的操作僅僅是界面上新增電台的一個假象。程序再次運行時,我們添加的電台並沒有保存。所以我們要將選中的電台添加到我的電台(由於我喜歡的電台可能有多個,所以我們定義了一個集合。)集合中。因為我們大家都知道集合中的數據時存儲在內存中的,所以我們要向程序下次運行時,顯示出我們添加的電台,那么就必須將集合中的數據永久保存。當然我們知道,永久保存數據的方法有很多,在這里我們采取的是使用txt文件的方式,所以我們書寫了一個方法來幫我們完成這項工作,sw.WriteLine(“End”)主要為了方便后面對文本文件的讀取

歸結起來有3點:

  01.在TreeView中添加節點

  02.向集合中添加節點

  03.將集合中數據寫入文本文件

刪除電台思路與這個差不多!就不贅述了。

右鍵菜單控制

核心思路:通過Visible屬性控制右鍵菜單的顯示和隱藏

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM