📄 main.cs
字号:
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 + -