⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cs

📁 PRR(个性RSS阅读器) PRR是一款全新的快捷实用的RSS阅读器
💻 CS
📖 第 1 页 / 共 4 页
字号:
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Threading;
using System.Web;


namespace 个性rss阅读器
{
    public partial class Main : Form
    {

        public static bool IsLoadOver = false;
        SplashScreen ss;
        public Main()
        {
            //加栽窗口时显示欢迎界面
            Bitmap bb = new Bitmap(@"logo.gif");
            ss = new SplashScreen(bb);
            Activate();
            //初始化窗体
            InitializeComponent();
            // System.Threading.Thread.Sleep(2000);

        }
        /// <summary>
        /// 窗体加载事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Load(object sender, EventArgs e)
        {

            if (!Directory.Exists("Data"))
            {
                Directory.CreateDirectory("Data");
            }
            BindNode();
            UpdateAllNews();
            //TreeViewMenu.TopNode.Expand();
            InitWebBrowser();
            //CurrentTime.Text = DateTime.Now.ToString("yyyy年MM月dd日");
            IsLoadOver = true;
            ss.Close();
        }
        /// <summary>
        /// 初始化软件介绍
        /// </summary>
        void InitWebBrowser()
        {

            webBrowserNewsList.DocumentText = @"<div align=center>PRR(个性RSS新闻阅
读器)</div><br>该软件采用多线程技术,在程序启动时在后台更新所有频道,支持用户并发更新频道和频道组,用户无更
新延迟感觉,将获取的新闻列表及新闻摘要下载到本地缓存起来,存储在自定义数据文件dat中,实现了网络新闻本地
浏览。频道采用XML存储技术,实现了无限级分类。<br><div align=right>作者:全伟<br />西
北工业大学<br>12030401信管班<br>2006年8月<br>All Right Reserved</div>";
        }
        /// <summary>
        /// 绑定TREEVIEW控件
        /// </summary>
        void BindNode()
        {
            /*
            TreeViewMenu.Nodes.Clear();
            MyTreeNode Root = new MyTreeNode(true);
            Root.Text = "我的收藏夹";
            Root.ContextMenuStrip = contextMenuStrip1;
            Root.ImageIndex = 0;
            TreeViewMenu.Nodes.Add(Root);
            RSS.BindNode(Root, @"/config/tree", contextMenuStrip1);
            Root.Expand();
             * */
            TreeViewMenu.Nodes.Clear();
            string Xpath = @"/config/tree";
            XmlDocument xmlPort = new XmlDocument();
            XmlNodeList NodeList;
            xmlPort.Load(RSS.GetMenuFileUrl());
            string xpath1 = Xpath + "/folder";
            NodeList = xmlPort.SelectNodes(xpath1);
            foreach (XmlNode Portnode in NodeList)
            {
                MyTreeNode Node1 = new MyTreeNode(true);
                Node1.Text = Portnode.Attributes["name"].Value;
                Node1.ContextMenuStrip = contextMenuStrip1;
                Node1.ImageIndex = 0;
                TreeViewMenu.Nodes.Add(Node1);
                RSS.BindNode(Node1, xpath1 + "[@name=\"" + Node1.Text + "\"]", contextMenuStrip1);
            }
            xpath1 = Xpath + "/channel";
            NodeList = xmlPort.SelectNodes(xpath1);
            foreach (XmlNode Portnode in NodeList)
            {
                MyTreeNode ChildNode = new MyTreeNode(false);
                ChildNode.MyRssLink = new RSSLink();
                ChildNode.MyRssLink.Name = Portnode["name"].InnerText;
                ChildNode.MyRssLink.Link = Portnode["link"].InnerText;
                ChildNode.Text = Portnode["name"].InnerText;
                ChildNode.ImageIndex = 3;
                ChildNode.SelectedImageIndex = 4;
                ChildNode.ContextMenuStrip = contextMenuStrip1;
                TreeViewMenu.Nodes.Add(ChildNode);
            }
        }
        /// <summary>
        /// 单击TreeView控件节点时触发的事件,用来显示该Rss站点的新闻列表
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TreeViewMenu_AfterSelect(object sender, TreeViewEventArgs e)
        {
            MyTreeNode c;
            try
            {
                c = ((MyTreeNode)TreeViewMenu.SelectedNode);
                string FileUrl = RSS.FormatUrl(c.MyRssLink.Link);
                RSS MyRss = new RSS();
                if (!File.Exists(FileUrl))
                {
                    MyRss.UpdateNews(c.MyRssLink.Link);
                    if (MyRss.NewsList == null)
                    {
                        TreeViewMenu.SelectedNode.Text = TreeViewMenu.SelectedNode.Text.Replace("(质疑)", "");
                        TreeViewMenu.SelectedNode.Text = "(质疑)" + TreeViewMenu.SelectedNode.Text;
                    }
                }


                List<RSSNews> NewsList = new List<RSSNews>();
                NewsList = MyRss.GetNewsList(FileUrl);
                DataTable dt = new DataTable();
                dt.Columns.Add("标题(双击查看)");
                dt.Columns.Add("发布日期");
                dt.Columns.Add("作者");
                dt.Columns.Add("Description");
                dt.Columns.Add("Category");
                dt.Columns.Add("Link");
                foreach (RSSNews MyRssNew in NewsList)
                {
                    DataRow row = dt.Rows.Add();
                    row["标题(双击查看)"] = MyRssNew.Title;
                    row["作者"] = MyRssNew.Author;
                    row["Category"] = MyRssNew.Category;
                    row["发布日期"] = MyRssNew.PubDate;
                    row["Description"] = MyRssNew.Description;
                    row["Link"] = MyRssNew.Link;
                }
                dataGridViewNewsList.DataSource = dt;
                dataGridViewNewsList.Columns["标题(双击查看)"].Width = 400;
                dataGridViewNewsList.Columns["发布日期"].Width = 200;
                dataGridViewNewsList.Columns["作者"].Width = 200;
                dataGridViewNewsList.Columns["Category"].Visible = false;
                dataGridViewNewsList.Columns["Description"].Visible = false;
                dataGridViewNewsList.Columns["Link"].Visible = false;
                GetAllNews(NewsList);

            }
            catch (Exception ee)
            {
                ;
            }

        }
        #region 线程更新RSS站点
        delegate void A();
        delegate void B(TreeNode Node);
        MyTreeNode ThreadMyTreeNode = null;
        string UpdateName = "";
        /// <summary>
        /// 获取节点的RSS站点
        /// </summary>

        /// <summary>
        /// 开始更新
        /// </summary>
        void SetTreeView1(TreeNode Node)
        {

            Node.ImageIndex = 5;
            Node.SelectedImageIndex = 5;

        }
        /// <summary>
        /// 更新完毕
        /// </summary>
        void SetTreeView2(TreeNode Node)
        {
            Node.ImageIndex = 3;
            Node.SelectedImageIndex = 4;

        }
        delegate void DBind(List<RSSNews> NewsList);
        void BindDataGrid(List<RSSNews> NewsList)
        {

            DataTable dt = new DataTable();
            dt.Columns.Add("标题(双击查看)");
            dt.Columns.Add("发布日期");
            dt.Columns.Add("作者");
            dt.Columns.Add("Description");
            dt.Columns.Add("Category");
            dt.Columns.Add("Link");
            foreach (RSSNews MyRssNew in NewsList)
            {
                DataRow row = dt.Rows.Add();
                row["标题(双击查看)"] = MyRssNew.Title;
                row["作者"] = MyRssNew.Author;
                row["Category"] = MyRssNew.Category;
                row["发布日期"] = MyRssNew.PubDate;
                row["Description"] = MyRssNew.Description;
                row["Link"] = MyRssNew.Link;
            }
            dataGridViewNewsList.DataSource = dt;
            dataGridViewNewsList.Columns["标题(双击查看)"].Width = 400;
            dataGridViewNewsList.Columns["发布日期"].Width = 200;
            dataGridViewNewsList.Columns["Category"].Visible = false;
            dataGridViewNewsList.Columns["Description"].Visible = false;
            dataGridViewNewsList.Columns["Link"].Visible = false;
            GetAllNews(NewsList);

        }
        void UpdateNews()
        {
            object oo = new object();
            lock (oo)
            {
                MyTreeNode c = new MyTreeNode(true);
                B d2 = new B(SetTreeView1);
                B d3 = new B(SetTreeView2);
                try
                {
                    c = ThreadMyTreeNode;
                    if (c.IsFolder)
                    {
                        return;
                    }
                    string FileUrl = RSS.FormatUrl(c.MyRssLink.Link);
                    this.Invoke(d2, c);
                    RSS MyRss = new RSS();
                    MyRss.UpdateNews(c.MyRssLink.Link);
                    List<RSSNews> NewsList = new List<RSSNews>();
                    NewsList = MyRss.GetNewsList(FileUrl);
                    DBind DBindDataGrid = new DBind(BindDataGrid);
                    this.Invoke(DBindDataGrid, NewsList);
                    #region
                    //DataTable dt = new DataTable();
                    //dt.Columns.Add("标题(双击查看)");
                    //dt.Columns.Add("发布日期");
                    //dt.Columns.Add("作者");
                    //dt.Columns.Add("Description");
                    //dt.Columns.Add("Category");
                    //dt.Columns.Add("Link");
                    //foreach (RSSNew MyRssNew in NewsList)
                    //{
                    //    DataRow row = dt.Rows.Add();
                    //    row["标题(双击查看)"] = MyRssNew.Title;
                    //    row["作者"] = MyRssNew.Author;
                    //    row["Category"] = MyRssNew.Category;
                    //    row["发布日期"] = MyRssNew.PubDate;
                    //    row["Description"] = MyRssNew.Description;
                    //    row["Link"] = MyRssNew.Link;
                    //}
                    //dataGridViewNewsList.DataSource = dt;
                    //dataGridViewNewsList.Columns["Title"].Width = 400;
                    //dataGridViewNewsList.Columns["Category"].Visible = false;
                    //dataGridViewNewsList.Columns["Description"].Visible = false;
                    //dataGridViewNewsList.Columns["Link"].Visible = false;
                    //GetAllNews();
                    #endregion
                }
                catch (Exception ee)
                {
                    //MessageBox.Show(ee.Message) ;
                }
                finally
                {
                    this.Invoke(d3, c);
                    UpdateName = "Free";
                }
            }
        }
        #endregion
        /// <summary>
        /// 对每一个Rss站点显示其新闻列表
        /// </summary>
        /// <param name="NewsList"></param>
        void GetAllNews(List<RSSNews> NewsList)
        {
            StreamReader a = new StreamReader(RSS.GetMode1FileUrl());
            string mode1 = a.ReadToEnd();
            StreamReader b = new StreamReader(RSS.GetMode2FileUrl());
            string mode2 = b.ReadToEnd();
            string AllNews = "";
            foreach (RSSNews MyRssNew in NewsList)
            {
                string ttmode = mode2;
                string Title = MyRssNew.Title;
                string PubDate = MyRssNew.PubDate;
                string Author = MyRssNew.Author;
                string Description = MyRssNew.Description;
                string Category = MyRssNew.Category;
                string Link = MyRssNew.Link;
                ttmode = ttmode.Replace("&TITLE", Title);
                ttmode = ttmode.Replace("&PubDate", PubDate);
                ttmode = ttmode.Replace("&Category", Category);
                ttmode = ttmode.Replace("&Description", Description);
                ttmode = ttmode.Replace("&LINK", Link);
                ttmode = ttmode.Replace("&READ", "阅读全文");
                AllNews += ttmode;
                if (AllNews.Length > 20000)
                {
                    AllNews += "<div>更多......</div>";
                    break;
                }

            }
            AllNews = mode1.Replace("&DIV", AllNews);
            webBrowserNewsList.DocumentText = AllNews;

        }
        /// <summary>
        /// 单击每条新闻触发的事件,显示新闻摘要
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dataGridViewNewsList_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (e.RowIndex < 0)
                {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -