📄 channel.cs
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Text;
using System.Web;
using System.Net;
using System.Xml;
using System.Windows.Forms;
namespace NewsReader
{
public partial class channel : Form
{
//FeedBase feedbase;
private string title;
private string ptitle;
public string Title
{
get { return title; }
set { title = value; }
}
private ReaderView viewType;
public ReaderView ViewType
{
get { return viewType; }
set { viewType = value; }
}
private string readerType;
public string ReaderType
{
get { return readerType; }
set { readerType = value; }
}
//添加书签信息使用,默认是添加书签
public channel()
{
InitializeComponent();
viewType = ReaderView.Add;
chkFeedType();
}
//删除修改书签信息使用
public channel(ReaderView mode, string title)
{
InitializeComponent();
viewType = mode;
this.title = title;
chkFeedType();
}
//修改书签信息使用
public channel(ReaderView mode,string title,string uptitle)
{
InitializeComponent();
viewType = mode;
this.title = title;
this.ptitle = uptitle;
chkFeedType();
}
//初始化窗体模式
public void chkFeedType()
{
switch (viewType)
{
case ReaderView.Add://如果是添加模式
panel1.Visible = false;
break;
case ReaderView.Modiy://如果是修改模式
/*能修改*/
txtFeedName.ReadOnly = false;
txtFeedUrl.ReadOnly = false;
txtFeedDesc.ReadOnly = false;
readChannel();
break;
case ReaderView.View://如果是查看模式
/*不能修改*/
txtFeedName.ReadOnly = true;
txtFeedUrl.ReadOnly = true;
txtFeedDesc.ReadOnly = true;
readChannel();
break;
}
}
private void btnModiy_Click(object sender, EventArgs e)
{
switch (viewType)
{
case ReaderView.View://如果当前是查看模式,则改为修改模式
viewType = ReaderView.Modiy;
chkFeedType();
break;
case ReaderView.Modiy://如果当前是修改模式,则修改后关闭窗体
editChannel();
break;
case ReaderView.Add://如果当前是添加模式,
break;
}
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
/// <summary>
/// 初始读取
/// </summary>
private void readChannel()
{
string desc;
string name;
string url;
string count;
string type;
if (ptitle == null)//如果没有子节点
{
desc = frmMainwindow.feeds[title].Description;
name = frmMainwindow.feeds[title].DisplayName;
url = frmMainwindow.feeds[title].Url;
count = frmMainwindow.feeds[title].Clicks.ToString();
type = frmMainwindow.feeds[title].Feedtype.ToString();
}
else//如果有子节点
{
desc = frmMainwindow.feeds[ptitle].Articles[title].Description;
name = frmMainwindow.feeds[ptitle].Articles[title].Title;
url = frmMainwindow.feeds[ptitle].Articles[title].Url;
count = frmMainwindow.feeds[ptitle].Articles[title].Clicks.ToString();
type = frmMainwindow.feeds[ptitle].Articles[title].Feedtype.ToString();
}
txtFeedDesc.Text = desc;
txtFeedName.Text = name;
txtFeedUrl.Text = url;
lblcount.Text = count;
foreach (RadioButton rdio in grbType.Controls)
{
if (rdio.Tag.ToString() == type)
rdio.Checked = true;
}
btnOK.Text = "确定(&O)";
}
/// <summary>
/// 编辑
/// </summary>
private void editChannel()
{
if (ptitle == null)//没有子节点
{
frmMainwindow.feeds.Remove(title);
addChannel(false);
frmMainwindow.isUntitled = true;//未保存过
}
}
FeedBase feedbase;
/// <summary>
/// 添加
/// </summary>
private void addChannel(bool ti)
{
if (txtFeedName.Text.Trim() != "" || txtFeedUrl.Text.Trim() != "" || txtFeedDesc.Text.Trim() != "")
{
int count = frmMainwindow.feeds.Count;//添加之前的数量
try
{
/*先将数据存进feedbase中*/
//rss.ReaderType rtype;
foreach (RadioButton radio in grbType.Controls)
{
if (radio.Checked)//被选中的项
{
switch (radio.Tag.ToString())//文档格式
{
case "html":
feedbase = new HtmlFeed();
feedbase.Feedtype = "html";
break;
case "rss":
feedbase = new RssFeed();
feedbase.Feedtype = "rss";
break;
case "feed":
feedbase = new AtomFeed();
feedbase.Feedtype = "feed";
break;
}
feedbase.DisplayName = txtFeedName.Text.Trim();
feedbase.Url = txtFeedUrl.Text.Trim();
feedbase.Description = txtFeedDesc.Text.Trim();
try
{
frmMainwindow.feeds.Add(feedbase.DisplayName, feedbase);//将feedbase添加到feeds集合中
}
catch (Exception)
{
return;
}
break;
}
}
}
catch (ArgumentException aEx)
{
Console.Write(aEx.ToString());
}
if (ti)
{
if (frmMainwindow.feeds.Count > count)//添加之后的数目有增加就表示为添加成功
{
frmMainwindow.isUntitled = true;//未保存过
MessageBox.Show("添加成功!");
}
else
{
MessageBox.Show("添加失败!");
}
}
}
}
private void btnOK_Click(object sender, EventArgs e)
{
if (txtFeedName.Text.Trim() == "" )
{
MessageBox.Show("请输入标签名称!");
txtFeedName.Focus();
return;
}
if (txtFeedUrl.Text.Trim() == "")
{
MessageBox.Show("请输入网址!");
txtFeedUrl.Focus();
return;
}
if(viewType.Equals(ReaderView.Modiy))//如果是修改模式,按确定之后要能关闭窗体
{
editChannel();
this.Close();
}
if (viewType.Equals(ReaderView.Add))//如果是添加模式,按添加按钮之后窗体不关闭
{
addChannel(true);
}
}
private void btnAutoTest_Click(object sender, EventArgs e)
{
string addurl = txtFeedUrl.Text.Trim();
if (addurl == "")
{
MessageBox.Show("请输入网址!");
txtFeedUrl.Focus();
return;
}
XmlDataDocument doc = new XmlDataDocument();
/*if(!(addurl.Substring(addurl.Length-4,4).Equals(".xml",StringComparison.CurrentCultureIgnoreCase)))
{
MessageBox.Show("非XML格式的文档网址,不能自动获取相关的信息!");
rdoHtml.Checked = true;
return;
}
*/
try
{
doc.Load(addurl);
}
catch (Exception nse)
{
Console.Write(nse.ToString());
MessageBox.Show("非XML格式的文档网址,不能自动获取相关的信息!");
rdoHtml.Checked = true;
return;
}
XmlNode rootnode = doc.DocumentElement; //读取XML的根节点
XmlNode channel = rootnode.FirstChild;
foreach (RadioButton radio in grbType.Controls)
{
if (rootnode.Name.ToString() == radio.Tag.ToString())//文档格式
{
radio.Checked = true;
if (rootnode.Name.ToString() == "rss")
{
foreach (XmlNode item in channel.ChildNodes) //对子节点进行循环
{
if (item.Name == "title") txtFeedName.Text = item.InnerText.ToString();
if (item.Name == "description") txtFeedDesc.Text = item.InnerText.ToString();
}
}
else if (rootnode.Name.ToString() == "feed")
{
foreach (XmlNode item in rootnode.ChildNodes) //对子节点进行循环
{
if (item.Name == "title") txtFeedName.Text = item.InnerText.ToString();
if (item.Name == "tagline") txtFeedDesc.Text = item.InnerText.ToString();
}
}
break;
}
else { rdoHtml.Checked = true; }
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -