程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 網絡電視精靈的框架及關鍵代碼,網絡電視精靈框架

網絡電視精靈的框架及關鍵代碼,網絡電視精靈框架

編輯:C#入門知識

網絡電視精靈的框架及關鍵代碼,網絡電視精靈框架


效果:

編寫節目類 屬性:播出時間、時段、名稱、視頻路徑

編寫頻道基類 屬性:頻道名稱、頻道節目單位置、節目列表 抽象方法:Fetch()

編寫頻道子類 繼承“頻道基類”,實現Fetch()【只寫方法聲明】

編寫頻道工廠類 方法:實現創建頻道子類

第一步.創建幾個類:

01:創建一個電視類(TvProgram)

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

屬性為:   

 public DateTime PlayTime { get; set; }
        public string SomeTime { get; set; }
        public string Name { get; set; }
        public string Path { get; set; }

02:創建一個頻道基類(ChannelBase)(父類或是超類),且此類為抽象類

屬性為:

   public string ChannelName{get; set; }

        public string Path { get; set; }

        public string Type { get; set; }

        public List<TvProgram> Tvlist { get; set; }

 

方法:

        public abstract List<TvProgram> Fetch();

03:創建一個A類頻道(TypeAChannel)

該類主要負責解析XM文件(北京電視台.xml)

 

04:創建一個B類頻道(TypeBChannel)

該類主要負責解析XML文件(鳳凰衛視.xml)

05:創建一個工廠類(工具類)(ChannelFactory)

該類主要負責頻道的選擇

總結:ChannelBase,TypeAChannel,TypeBChannel,ChannelFactory四個類主要控制頻道信息

06:創建一個管理類(ChannelManager)

創建一個方法LoadAllChannel():解析文件

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

第二步.寫代碼的核心思路:

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

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

XML文檔中的數據。也就是我們實現了將

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

代碼:

 public Dictionary<string, ChannelBase> Fulllist
       {
            get { return fulllist; }
            set { fulllist = value; }
        }
        private string channelPath = "files/FullChannel.xml";
      //構造函數中new
      public ChannelManager() {
          fulllist = new Dictionary<string, ChannelBase>();
      }
      //解析xml文件
      public void ReadFiles() {
          fulllist.Clear();
          XmlDocument doc = new XmlDocument();
          doc.Load(channelPath);
          XmlNode root = doc.DocumentElement;
          foreach (XmlNode item in root.ChildNodes)
          {
              ChannelBase channelSB = ChannelFactory.CreateFile(item["channelType"].InnerText);
              channelSB.Type = item["channelType"].InnerText;
              channelSB.ChannelName = item["tvChannel"].InnerText;
              channelSB.Path=item["Path"].InnerText;
              fulllist.Add(channelSB.ChannelName,channelSB);
          }

   02:將集合中的數據綁定到ListView中

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

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

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

我們需要在該節點上添加頻道名稱

核心代碼如下:

ChannelManager manager = new ChannelManager();
            manager.ReadFiles();
            Dictionary<string, ChannelBase> dsc = manager.Fulllist;
            foreach (ChannelBase item in dsc.Values)
            {
                TreeNode td = new TreeNode();
                td.Text = item.ChannelName;
                //頻道對象
                td.Tag = item;
                tvlist.Nodes[1].Nodes.Add(td);
            }

03:A類頻道(TypeAChannel)

 public override List<TvProgram> Fetch()
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(Path);
            XmlNode root = doc.DocumentElement;
            if (Tvlist == null)
            {
                Tvlist = new List<TvProgram>();
            }
            foreach (XmlNode child in root.ChildNodes)
            {
                TvProgram tvp = new TvProgram();
                if (child.Name == "tvProgramTable")
                {
                    foreach (XmlNode two in child.ChildNodes)
                    {
                        tvp.PlayTime = Convert.ToDateTime(two["PlayTime"].InnerText);
                        tvp.SomeTime = two["meridien"].InnerText;
                        tvp.Name = two["programName"].InnerText;
                        tvp.Path = two["path"].InnerText;
                        Tvlist.Add(tvp);
                    }                
                }
            }
            return this.Tvlist;

 

         04:B類頻道(TypeBChannel)和A類解析方法是一樣的。

05:進行頻道的選擇:

   工廠類(工具類)(ChannelFactory)

代碼:

public static ChannelBase CreateFile(string type) {
          ChannelBase cb = null;
          switch (type)
          {
              case "TypeA":
                  cb = new TypeAChannel();
                  break;
              case "TypeB":
                  cb = new TypeBChannel();
                  break;
              default:
                  break;
          }              
          return cb;
      }

07:把數據綁定到dataGriv中,在Afterselect事件中寫

代碼:

TreeNode selectNode = tvlist.SelectedNode;
            if (selectNode.Level==1&&selectNode.Parent.Text=="所有電視台")
            {
                ChannelBase channel = (ChannelBase)selectNode.Tag;
                if (channel.Tvlist != null)
                {
                    channel.Tvlist.Clear();
                }
                //方式一:
                //List<TvProgram> tvlist1 = new List<TvProgram>();
                //dgvlist.DataSource = tvlist1;
                    //方式二:
                dgvlist.DataSource =channel.Fetch();
            }

08:實現添加電台和刪除電台

添加:

 TreeNode selectNOde = tvlist.SelectedNode;

            ChannelBase channel = (ChannelBase)selectNOde.Tag; 

                tn.Text = channel.ChannelName;

                tn.Tag = channel;

                my.Nodes.Add(tn);

刪除:

my.Nodes.Remove(tn);

09.

001:

當在我的電台中沒有頻道時,沒有刪除功能,更不能有添加功能

如果有了已添加的頻道,才有刪除功能。但此時也不能有添加功能。

002:

當在所有電台中時,沒有刪除功能,只有添加功能。

代碼如下:

  TreeNode select = tvlist.SelectedNode;
            if (select!=null&&select.Level==1)
            {
                if (select.Parent.Text=="我的電視台")
                {
                    tvment.Items[0].Visible = false;            
                    tvment.Items[1].Visible = true;
                }
                else
                {
                    tvment.Items[0].Visible = true;
                   tvment.Items[1].Visible = false;
                }
            }
            else
            {
                tvment.Items[0].Visible = false;
                tvment.Items[1].Visible = false;
            }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved