//---set the webbrowser control to display the post content---

   frm2.webBrowser1.DocumentText = node.Tag.ToString();

   //---show Form2---

   frm2.Show();

  }

 }

}

Figure 18-16

To unsubscribe a feed, you remove the feed's URL from the text file and then remove the feed node from the TreeView control. This is handled by the Unsubscribe MenuItem control:

//---Unsubscribe a feed---

private void mnuUnsubscribe_Click(object sender, EventArgs e) {

 //---get the node to unsubscribe---

 TreeNode CurrentSelectedNode = TreeView1.SelectedNode;

 //---confirm the deletion with the user---

 DialogResult result =

  MessageBox.Show('Remove ' + CurrentSelectedNode.Text + '?',

   'Unsubscribe', MessageBoxButtons.YesNo,

   MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

 try {

  if (result == DialogResult.Yes) {

   //---URL To unsubscribe---

   string urlToUnsubscribe = CurrentSelectedNode.Tag.ToString();

   //---load all the feeds from feeds list---

   TextReader textreader = File.OpenText(feedsList);

   string[] feeds = textreader.ReadToEnd().Split('|');

   textreader.Close();

   //---rewrite the feeds list omitting the one to be

   // unsubscribed---

   TextWriter textwriter = File.CreateText(feedsList);

   for (int i = 0; i <= feeds.Length - 2; i++) {

    if (feeds[i] != urlToUnsubscribe) {

     textwriter.Write(feeds[i] + '|');

    }

   }

   textwriter.Close();

   //---remove the node from the TreeView control---

   CurrentSelectedNode.Remove();

   MessageBox.Show('Feed unsubscribed!');

  }

 } catch (Exception ex) {

  MessageBox.Show(ex.Message);

 }

}

When the user needs to refresh a feed, first make a backup copy of the feed XML document and proceed to subscribe to the same feed again. If the subscription is successful, remove the node containing the old feed. If the subscription is not successful (for example, when a device is disconnected from the Internet), restore the backup feed XML document. This is handled by the Refresh Feed MenuItem control:

//---refresh the current feed---

private void mnuRefreshFeed_Click(object sender, EventArgs e) {

 //---if no Internet connectivity---

 if (!IsConnected()) {

  MessageBox.Show('You are not connected to the Internet.'); return;

 }

 //---get the node to be refreshed---

 TreeNode CurrentSelectedNode = TreeView1.SelectedNode;

 string url = CurrentSelectedNode.Tag.ToString();

 //---get the filename of the feed---

 string FileName =

  appPath + @'' + RemoveSpecialChars(url) + '.xml';

 try {

  //---make a backup copy of the current feed---

  File.Copy(FileName, FileName + '_Copy', true);

  //---delete feed from local storage---

  File.Delete(FileName);

  //---load the same feed again---

  if (SubscribeFeed(url)) {

   //---remove the node to be refreshed---

   CurrentSelectedNode.Remove();

  } else //---the subscription(refresh) failed---

  {

   //---restore the deleted feed file---

   File.Copy(FileName + '_Copy', FileName, true);

   MessageBox.Show('Refresh not successful. Please try again.');

  }

  //---delete the backup file---

  File.Delete(FileName + '_Copy');

 } catch (Exception ex) {

  MessageBox.Show('Refresh failed (' + ex.Message + ')');

 }

}

In the Click event handler for the Collapse All Feeds MenuItem control, use the CollapseAll() method from the TreeView control to collapse all the nodes:

private void mnuCollapseAllFeeds_Click(object sender, EventArgs e) {

 TreeView1.CollapseAll();

}

Finally, code the Click event handler in the Back MenuItem control in Form2 as follows:

private void mnuBack_Click(object sender, EventArgs e) {

 this.Hide();

}

That's it! You are now ready to test the application.

Testing Using Emulators

Вы читаете C# 2008 Programmer's Reference
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату