這篇文章的目的主要為了后續工作的使用,在這里對S2深入.NET平台和C#編程中貫穿案例《網絡電視精靈》的部分實現代碼進行思路剖析。
一、項目框架的搭建:
我們都知道開發一個項目之前,應該對項目的整體框架進行搭建。或者專業一點稱為詳細設計。解析來我們就來看下網絡電視精靈的大致結構,當然后續的功能可能還需要加入其它類。
思路分析:
1.創建對應的類
TvProgram:節目類
該類主要負責定義節目的屬性,為后續從xml文件中讀取的內容提供存放位置。
ChannelBase:頻道基類
TypeAChannel:A類頻道
TypeBChannel:B類頻道
ChannelFactory:工廠類
上述四個類主要控制頻道信息
ChannelManager:頻道管理類
該類主要作用實質上減輕窗體中的代碼量。相當於程序的工具類。
2013年8月18日
任務;加載所有的頻道信息,綁定到界面的TreeView上
核心思路:
1.首先在頻道管理類ChannelManager中寫一個加載所有頻道方法LoadAllChannel;
該方法作用讀取FullChannels.xml文件,並且將讀取到的內容賦值給ChannelBase 對象。關鍵的問題就轉化成了如何創建一個ChannelBase對象。我們都知道ChannelBase本身是一個抽象類,無法創建實例。由此,我們想到可以通過其子類來創建對象。由於不同子類實例化需要多次new,我們單獨寫了一個工廠類(ChannelFafactory),來創建子類實例,但是該子類實例存儲在父類變量中。賦值完成后,我們需要將頻道對象添加到字典中。那么
LoadAllChannel方法結束后,字典中就有了XML文檔中的數據。也就是我們實現了將
本地硬盤上的xml文件中的數據讀取到了內存中的一個字典集合中。
2.將集合中的數據綁定到TreeView中
將字典集合中的數據通過Foreach拆解,每循環一項,都創建一個TreeNode對象。
並且將集合中的屬性賦值給節點對應的屬性。然后將拼接處的節點添加到TreeView上
。這里需要注意的是,如何找到TreeView控件中的【所有電視台】這個節點,因為
我們需要在該節點上添加頻道名稱。代碼如下:
2013年8月21日
擴展: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屬性控制右鍵菜單的顯示和隱藏