填充我的博客侧边栏——Word 2007高级应用
假设"我的博客"侧边栏的相关文件安置在My Blogs文件夹里,该文件夹的结构如下图所示:
图 1
虽然我们可以通过枚举My Blogs的子文件夹来填充cbxBlogs控件,然而我希望设计一个类来表示博客并且实现一定的数据绑定。回顾上一篇文章“创建我的博客侧边栏 ——Word 2007高级应用(二)”,"我的博客"侧边栏应该具备如下特性:
它会在启动时读取My Blogs文件夹里的相关信息,并且填充 cbxBlogs控件;
当我们在博客列表中选择某个博客时,它会通过RSS获取该博客最近发布的帖子,并且填充lbxRecentPosts控件;
当我们在博客列表中选择某个博客时,它会读取该博客帖子草稿文件夹里的数据,并且填充lbxDrafts控件;
当我们在博客列表中选择某个博客时,按下View Blog按钮将会在Internet Explorer中打开该博客的主页;
当我们在最近帖子列表中选择某个帖子时,按下View Post按钮将会在Internet Explorer中打开该帖子的网页;
当我们在草稿列表中选择某个草稿时,按下Open Draft按钮将会在新的Word 2007中打开该草稿。
明确这些需求后,我们就可以着手写代码了:
对于Code #01,以下几点是需要说明的:
Post、Draft和Blog类都重写了ToString()方法,这是因为ComboBox和ListBox等控件会调用该方法并把返回的字符串用 作条目的显示,重写该方法是为了让条目得到正确的显示。当然,如果你结合DataSource和DisplayMember来使用,也可以不重写 ToString()方法。
Blog.GetRecentPosts()方法里使用Argotic Syndication Framework来进行RSS信息处理,所以你需要下载并安装它,然后在项目中引用相关的类库和Argotic.Core.Rss命名空间。
Blog.GetRecentPosts()方法里对RSS地址进行了假设,这个假设适用于博客园以及旗下其它网站,当然,你可以想出很多方法让它具备普遍适用性。
Blog.GetRecentPosts()方法里使用NetworkInterface. GetIsNetworkAvailable()方法判断当前网络是否连通,如果连通则获取数据,否则返回空数组。
Blog.GetDrafts()方法没有进行任何筛选,这里假设文件夹里面只包含.docx和/或.doc文件。由于这些文件将会用Word 2007打开,如果你可能往文件夹里放置Word 2007不能读取的文件,那么你最好为LINQ查询语句加入where来进行必要的过滤。
在Blog.GetDrafts()方法里,我还假设My Blogs文件夹是放在"我的文档"里的,并且博客所在的文件夹名字和博客的名字一样,当然,这样我们就不能在博客的名字里面包含非法的路径字符了。
我们可以让文件夹的名字和博客的名字相同,但却无法在这里包含博客的URL信息,而这又是很多操作的前提,于是我在My Blogs文件夹里放置一个Blogs.xml文件,里面包含了如下内容:
新闻热点
疑难解答