Text = 'Subscribed Feeds'
};
//---add the node to the tree---
TreeView1.Nodes.Add(node);
TreeView1.SelectedNode = node;
} catch (Exception ex) {
MessageBox.Show(ex.Message);
return;
}
try {
//---load all subscribed feeds---
if (File.Exists(feedsList)) {
TextReader textreader = File.OpenText(feedsList);
//---read URLs of all the subscribed feeds---
string[] feeds = textreader.ReadToEnd().Split('|');
textreader.Close();
//---add all the feeds to the tree---
for (int i = 0; i <= feeds.Length - 2; i++)
SubscribeFeed(feeds[i]);
} else {
//---pre-subscribe to a few feed(s)---
SubscribeFeed(
'http://www.wrox.com/WileyCDA/feed/RSS_WROX_ALLNEW.xml');
}
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
When the form is first loaded, you have to create a root node for the TreeView
control and load all the existing feeds. All subscribed feeds are saved in a plain text file (Feeds.txt
), in the following format:
Feed URL|Feed URL|Feed URL|
An example is:
http://news.google.com/?output=rss|http://rss.cnn.com/rss/cnn_topstories.rss|
If there are no existing feeds (that is, if Feeds.txt
does not exist), subscribe to at least one feed.
In the Click
event handler of the Subscribe MenuItem
control, prompt the user to input a feed's URL, and then subscribe to the feed. If the subscription is successful, save the feed URL to file:
private void mnuSubscribe_Click(object sender, EventArgs e) {
if (!IsConnected()) {
MessageBox.Show('You are not connected to the Internet.');
return;
}
//---add a reference to Microsoft.VisualBasic.dll---
string URL = Microsoft.VisualBasic.Interaction.InputBox(
'Please enter the feed URL', 'Feed URL', lastURLEntered, 0, 0);
if (URL != String.Empty) {
lastURLEntered = URL;
//---if feed is subscribed successfully---
if (SubscribeFeed(URL)) {
//---save in feed list---
TextWriter textwriter = File.AppendText(feedsList);
textwriter.Write(URL + '|');
textwriter.Close();
} else {
MessageBox.Show('Feed not subscribed. ' +
'Please check that you have entered ' +
'the correct URL and that you have ' +
'Internet access.');
}
}
}
C# does not include the InputBox()
function that is available in VB.NET to get user's input (see Figure 18-14). Hence, it is a good idea to add a reference to the Microsoft.VisualBasic.dll
library and use it as shown in the preceding code.

Figure 18-14
Whenever a node in the TreeView
control is selected, you should perform a check to see if it is a posting node and enable/disable the MenuItem controls appropriately (see Figure 18-15):
//---fired after a node in the TreeView control is selected---
private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e) {
//---if a feed node is selected---
if (e.Node.ImageIndex != ICO_POST && e.Node.Parent != null) {
mnuUnsubscribe.Enabled = true;
mnuRefreshFeed.Enabled = true;
} else {
//---if a post node is selected---
mnuUnsubscribe.Enabled = false;
mnuRefreshFeed.Enabled = false;
}
}

Figure 18-15
When the user selects a post using the Select button on the navigation pad, Form2
containing the WebBrowser
control is loaded and its content set accordingly (see Figure 18-16). This is handled by the KeyDown
event handler of the TreeView control:
//---fired when a node in the TreeView is selected
// and the Enter key pressed---
private void TreeView1_KeyDown(object sender, KeyEventArgs e) {
TreeNode node = TreeView1.SelectedNode;
//---if the Enter key was pressed---
if (e.KeyCode == System.Windows.Forms.Keys.Enter) {
//---if this is a post node---
if (node.ImageIndex == ICO_POST) {
//---set the title of Form2 to title of post---
frm2.Text = node.Text;
//---modifier for webBrowser1 in Form2 must be set to
// Internal---