rssView = new ItemListView<RssItem>(rssFeed.MainChannel.Title, rssFeed.MainChannel.Items);
InitializeRssView();
// 初始化 ItemDescriptionView 以显示 RssItem 的说明信息。
// 该信息将出现在屏幕的右侧。
rssDescriptionView.Dispose();
rssDescriptionView = new ItemDescriptionView<RssItem>();
InitializeRssDescriptionView();
}
//访问并显示前一个RSS源
private void PreviorsRss()
{
try
{
i = i - 1;
if (i >= Properties.Settings.Default.RssFeedUris.Count)
{
i = 0;
}
if (i < 0)
{
i = Properties.Settings.Default.RssFeedUris.Count - 1;
}
rssFeed = RssFeed.FromUri(Properties.Settings.Default.RssFeedUris[i]);
}
catch
{
rssFeed = RssFeed.FromText(Properties.Resources.DefaultRSSText);
}
//读取完后还需要重新建立显示对象
//这个函数很关键,一定要释放资源
rssView.Dispose();
rssView = new ItemListView<RssItem>(rssFeed.MainChannel.Title, rssFeed.MainChannel.Items);
InitializeRssView();
// 初始化 ItemDescriptionView 以显示 RssItem 的说明信息。
// 该信息将出现在屏幕的右侧。
rssDescriptionView.Dispose();
rssDescriptionView = new ItemDescriptionView<RssItem>();
InitializeRssDescriptionView();
}
i是用来标识现在显示的RSS源在程序设置的字符串集合中位置的静态变量,要在ScreenSaverForm.cs中先定义好。键盘响应回车键打开RSS项对应的网页,使用SuperLink函数,代码如下:
//打开超级链接
private void SuperLink()
{
System.Diagnostics.Process.Start(rssFeed.Channels[0].Items[rssView.SelectedIndex].Link);
Close();
}
键盘响应函数代码如下:
private void ScreenSaverForm_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Up:
rssView.PreviousArticle();
break;
case Keys.Down:
rssView.NextArticle();
break;
case Keys.Left:
PreviorsRss();
break;
case Keys.Right:
NextRss();
break;
case Keys.Enter:
SuperLink();
break;
default:
Close();
break;
}
}
到这里整个程序就已经完成了,可以直接编译运行,不过有点小瑕疵,就是在添加或删除一个RSS源后,RssListBox并没有马上显示变更的效果,这是因为在操作后没有及时调用RssListBox的刷新函数。原例程中的RssFeed类只能访问UTF-8编码的RSS源,如果有兴趣可以加以改进,使它能访问其他编码方式的RSS源。只有自己动手做过,印象才会深刻,理解才会更透彻,这两个功能相信读者可以做出来。
|