
C# ПІДРУЧНИКИ / c# / Premier Press - C# Professional Projects
.pdf
378Project 3 CREATING A CREATIVE LEARNING PROJECT
4.In the Administrative Tools window, click on the Event Viewer option.
The Event Viewer window is displayed. Figure 17-7 displays the Event Viewer window.


380 Project 3 CREATING A CREATIVE LEARNING PROJECT
In addition to tracking events, Event Viewer can track the errors that are generated by the application while processing the cash memo document. When an error occurs, you can change the notification icon to Error.ico by creating an instance of the Error.ico file by adding the following statement to the frmCreative class:
private System.Drawing.Icon m_Error= new System.Drawing.Icon(“Error.ICO”);
TIP
Remember to add the Error.ico file to the bin folder of your application.
To add an error entry to the EventLog component, you need to catch any exception that is generated by the application. The exception can then be written to Event Viewer by using the WriteEntry() method.
The WriteEntry() method is a void method of the EventLog class in the System.Diagnostics namespace.The WriteEntry() method is used to write a message to Event Viewer. The message to be displayed is passed as a parameter to the WriteEntry() method. You can now add code to the Created event that writes error logs to Event Viewer.
catch (Exception catchException)
{
icoNotify.Icon=m_Error;
icoNotify.Text=”Error in “ + e.Name;
if (optGenerateLog.Checked==true)
eventLog.WriteEntry(e.Name + “: “ + catchException.Message);
}
In the preceding code, the Error.ico notification icon is displayed and a ToolTip displaying the error message is added to the notification icon. The code then checks whether the optGenerateLog check box is checked. If the user has selected the check box, the error entry is written to Event Viewer. However, the user may choose to clear the check box.This would prevent the error entry from being written to Event Viewer.

INTERACTING WITH A MICROSOFT WORD DOCUMENT |
Chapter 17 |
381 |
|
|
|
|
|
Figure 17-10 shows the Error.ico notification icon with an error message displayed in the status area.
FIGURE 17-10 The Error.ico notification icon with an error message
Figure 17-11 displays the error entry in Event Viewer.
FIGURE 17-11 The error entry in Event Viewer
After writing the data to an XML document, you need to close the object of the XmlTextWriter class by using the Close() method.In addition, you need to exit the Word application. You can do this by using the Quit() method. You can then instantiate the object of the Word.Application class to null so that the object can refer to another Word document in the source directory. In addition, you need to enable the directory watcher component to monitor the source directory.
finally
{
xmlWrite.Flush();
xmlWrite.Close();


INTERACTING WITH A MICROSOFT WORD DOCUMENT |
Chapter 17 |
|
383 |
|
|
||||
|
|
|
|
|
Displaying Event Entries from Event Viewer
You have created a list box that will display the event entries from Event Viewer. You can now add code to the Refresh Log button. When the user clicks on the Refresh Log button, the event entries from Event Viewer are picked and displayed in the lstEvents list box. To do this, add the following code to the Click event of the Refresh Log button.
private void btnRefresh_Click(object sender, System.EventArgs e)
{
lstEvents.Items.Clear(); eventLog.Log=”Application”; eventLog.MachineName=”.”;
foreach (EventLogEntry logEntry in eventLog.Entries)
{
if (logEntry.Source==”CreativeLearning”)
{
lstEvents.Items.Add(logEntry.Message);
}
}
}
The preceding code uses the Clear() method to clear the contents of the lstEvents list box.The code then sets the Log property of the EventLog class to the Application Log node of Event Viewer. Specifying the MachineName property of the EventLog class to . (dot) indicates that the event log is created in the Event Viewer of the user’s machine.
Next, the foreach loop is used to write all the event entries with Source as Creative Learning to the lstEvents list box. The Add() method of the ListBox class adds an entry as an item to the lstEvents list box. Figure 17-12 shows the Application Log node of Event Viewer.


INTERACTING WITH A MICROSOFT WORD DOCUMENT |
Chapter 17 |
385 |
|
|
|
|
|
In addition to creating a list box to list the event entries for the Creative Learning application, you can display the contents of the Summary.xml document in a message box.
Displaying Data from the Summary.xml Document in a Message Box
To display the data from the Summary.xml document in a message box, you need to read data from the XML document. To do this, create an instance of the
StreamReader class strRead. The StreamReader class is a class in the System.IO
namespace and implements the System.IO.TextReader class. The TextReader class represents a reader that is used to read the characters in a byte stream. To create an instance of the StreamReader class, use the following statement:
StreamReader strRead;
After creating the instance, you can use it to read the contents of the Summary.xml document in the directory specified in the txtDest text box. To read the data from the Summary.xml document, use the following statement:
strRead= new StreamReader(txtDest.Text+”Summary.xml”);
The data in the strRead object can then be displayed in a message box by using the Show() method of the MessageBox class. To read the data in the Summary.xml document, use the ReadToEnd() method of the StreamReader class that reads the entire content of the Summary.xml document. In addition, you can include the OK button and the Info.ico file in the message box by passing them as parameters to the Show() method. To display a message box, type the following statement in the Click event of the btnSummary button.
try
{
strRead= new StreamReader(txtDest.Text+”Summary.xml”); MessageBox.Show(strRead.ReadToEnd(),txtDest.Text+”Summary.xml”,MessageBoxButtons
.OK,MessageBoxIcon.Information); strRead.Close();
}


INTERACTING WITH A MICROSOFT WORD DOCUMENT |
Chapter 17 |
387 |
|
|
|
|
|
You have completed writing code for the application. The following is the complete code for the application.
using System;
using System.Drawing; using System.Collections;
using System.ComponentModel; using System.Windows.Forms; using System.Data;
using System.IO;
using System.Diagnostics; using System.Xml;
namespace CreativeLearning
{
public class frmCreative : System.Windows.Forms.Form
{
private System.Drawing.Icon m_Ready= new System.Drawing.Icon(“Ready.ICO”); private System.Drawing.Icon m_Error= new System.Drawing.Icon(“Error.ICO”); private System.Drawing.Icon m_Info= new System.Drawing.Icon(“Info.ICO”); private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.NotifyIcon icoNotify; private System.Windows.Forms.TabControl tabControl1; private System.Windows.Forms.TabPage tabSource; private System.Windows.Forms.TabPage tabDest; private System.Windows.Forms.ImageList imageList1; private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox txtSource; private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox txtProcessedFile; private System.Windows.Forms.CheckBox optGenerateLog; private System.Windows.Forms.ContextMenu mnuNotify; private System.Windows.Forms.MenuItem menuItem2; private System.Windows.Forms.MenuItem mnuConfigure; private System.Windows.Forms.MenuItem mnuExit; private System.IO.FileSystemWatcher watchDir;
private System.Windows.Forms.ErrorProvider errMessage;