网络电视精灵

 1  //频道基类
 2       public abstract class ChannelBase
 3     {
 4           //频道名称
 5         public string ChannelName { get; set; }
 6        //频道路径
 7           public string  Path { get; set; }
 8           //节目列表,TvProgram节目类频道上的所有节目列表
 9           public List<TvProgram> TvList { get; set; }
10           //获取频道列表:通过Fetch方法获取该频道拥有的所有节目列表
11           public abstract void Fetch();
12 
13           public ChannelBase() { }
14           public ChannelBase(string channelName, string path, List<TvProgram> list)
15           {
16               this.ChannelName = channelName;
17               this.Path = path;
18               this.TvList = list;
19           }
20 
21       }
 1 public  class ChannelFactory
 2     {
 3        public static ChannelBase getInstance(string type)
 4        {
 5            ChannelBase channel = null;
 6            switch (type)
 7            {
 8                case "TypeA":
 9                    //创建北京电视台对象
10                    channel = new TypeAChannnel();
11                    break;
12                case "TypeB":
13                    //创建凤凰卫视对象
14                    channel = new TypeBChannel();
15                    break;
16                default:
17                    break;
18            }
19            return channel;
20        }
21     }
 1  public class ChannelManager
 2     {
 3         //定制一个泛型集合 Dictionary<K,V>
 4         //key:频道的名称    value:频道对象
 5         private Dictionary<string, ChannelBase> allChannels = new Dictionary<string, ChannelBase>();
 6 
 7         public Dictionary<string, ChannelBase> AllChannels
 8         {
 9             get { return allChannels; }
10             set { allChannels = value; }
11         }
12       /// <summary>
13       /// 解析所有电视台并填充到双列集合中
14       /// </summary>
15         public void ResolveAllChannels()
16         {
17             XmlDocument doc = new XmlDocument();
18             doc.Load("files\FullChannels.xml");
19             XmlNode root = doc.DocumentElement;
20             foreach (XmlNode item in root.ChildNodes)
21             {
22                 string type = item["channelType"].InnerText;
23                 //一个item就是一个频道
24                 ChannelBase channel = ChannelFactory.getInstance(type);
25                 channel.ChannelName = item["tvChannel"].InnerText;
26                 channel.Path = item["path"].InnerText;
27                 //解析到双列集合中
28                 allChannels.Add(channel.ChannelName, channel);
29             }
30 
31         }
32         
33     }
 1 //节目类
 2    public  class TvProgram
 3     {
 4        //播出时间
 5         public DateTime PlayTime { get; set; }
 6        //早间档 午间档 晚间档
 7        public string ShiDuan { get; set; }
 8         //节目名称
 9        public string  Name { get; set; }
10       //视频路径
11        public string Path { get; set; }
12    }
 1  //北京电视台
 2     public class TypeAChannnel : ChannelBase
 3     {
 4         public override void Fetch()
 5         {
 6             
 7             //获取频道列表
 8             XmlDocument doc = new XmlDocument();
 9             doc.Load(Path);
10             XmlNode elem = doc.DocumentElement;
11             TvList = new List<TvProgram>();
12 
13              foreach (XmlNode node in elem.ChildNodes)
14             {
15                 if (node.Name == "tvProgramTable")
16                 {
17                     foreach (XmlNode child in node.ChildNodes)
18                     {
19                         TvProgram program = new TvProgram();
20                         program.PlayTime = Convert.ToDateTime(child["playTime"].InnerText);
21                         program.ShiDuan = child["meridien"].InnerText;
22                         program.Name = child["programName"].InnerText;
23                         program.Path = child["path"].InnerText;
24 
25                         this.TvList.Add(program);
26                     }
27                 }
28 
29             }
30            
31         }
32 }
 //凤凰卫视
   public  class TypeBChannel:ChannelBase
    {
       public override void Fetch()
       {
           //获取节目列表  
           XmlDocument xmlDoc = new XmlDocument();
           xmlDoc.Load(Path);
           XmlNode elem = xmlDoc.DocumentElement;
           TvList = new List<TvProgram>();
            foreach (XmlNode node in elem.ChildNodes[0])//[0]第一个节点  
           {
               TvProgram programe = new TvProgram();
               programe.PlayTime = DateTime.Parse(node["playTime"].InnerText);
               programe.ShiDuan = "";
               programe.Name = node["name"].InnerText;
               programe.Path = node["path"].InnerText;

               this.TvList.Add(programe);
           }  
       }

    }
 

 1  TreeNode node = new TreeNode();
 2         TreeNode allNode = new TreeNode();//另一个根节点
 3         Dictionary<string, List<TvProgram>> dic = new Dictionary<string, List<TvProgram>>();
 4         private void frmMain_Load(object sender, EventArgs e)
 5         {
 6             dgvList.AutoGenerateColumns = false;
 7             //1.在treeview上构建两个根节点
 8             node.Text = "我的电视台";
 9             //2.将node绑定到treeView1上
10             treeView1.Nodes.Add(node);
11 
12             allNode.Text = "所有电视台";
13             //2.将allNode绑定到treeView1上
14             treeView1.Nodes.Add(allNode);
15 
16             LoadDataFromXml();
17         }
18         /// <summary>
19         /// 动态绑定treeview节点
20         /// </summary>
21         private void LoadDataFromXml()
22         {
23             //ChannelManager有一个集合 调度 ResolveAllChannels方法 集合就有值了
24             ChannelManager manager = new ChannelManager();
25             manager.ResolveAllChannels();//解析所有电视台相当于给集合赋值
26             foreach (ChannelBase channel in manager.AllChannels.Values)
27             {
28                 //一个channel在Tv上就是一个节点
29                 TreeNode tn = new TreeNode();
30                 tn.Text = channel.ChannelName;
31                 tn.Tag = channel;
32                 allNode.Nodes.Add(tn);
33             }
34 
35         }
36 
37         private void treeView1_AfterSelect_1(object sender, TreeViewEventArgs e)
38         {
39             TreeNode selectNode = treeView1.SelectedNode;
40             //获取到选中节点的level值
41             int level = selectNode.Level;
42             if (level == 1)
43             {
44                 ChannelBase channel = (ChannelBase)selectNode.Tag;
45                 channel.Fetch();
46                 //channel.TvList.Clear();
47                 dgvList.DataSource = channel.TvList;
48 
49             }
50         }
51 
52         private void 添加ToolStripMenuItem_Click(object sender, EventArgs e)
53         {
54             TreeNode selectedNode = treeView1.SelectedNode;
55             ChannelBase channel = (ChannelBase)selectedNode.Tag;
56             channel.Fetch();
57             foreach (TreeNode item in selectedNode.Nodes)
58             {
59                 if (item.Text == channel.ChannelName)
60                 {
61                     MessageBox.Show("此电视台已加入,无需重复添加!");
62                     return;
63                 }
64             }
65             dic.Add(channel.ChannelName, channel.TvList);
66             TreeNode NewNode = new TreeNode();
67             NewNode.Text = channel.ChannelName;
68             NewNode.Tag = channel;
69             node.Nodes.Add(NewNode);
70         }
71 
72         private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
73         {
74             TreeNode selectedNode = treeView1.SelectedNode;
75             ChannelBase channel = (ChannelBase)selectedNode.Tag;
76             dic.Remove(channel.ChannelName);
77             selectedNode.Nodes.Remove(selectedNode);
78 
79         }
80 
81         private void 播放ToolStripMenuItem_Click(object sender, EventArgs e)
82         {
83             string programName = dgvList.SelectedRows[0].Cells[1].Value.ToString();
84             MessageBox.Show("正在播放:" + programName + "");
85 
86         }
87   
原文地址:https://www.cnblogs.com/aaaaliling/p/8903658.html