Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C# ПІДРУЧНИКИ / c# / Premier Press - C# Professional Projects

.pdf
Скачиваний:
475
Добавлен:
12.02.2016
Размер:
14.7 Mб
Скачать

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.

FIGURE 17-7

 

 

Y

 

L

 

F

 

M

 

A

 

E

 

T

 

 

The Event Viewer window

 

The EventLog Component

Visual Studio .NET provides you with the EventLog component to view the events logged in Event Viewer. In addition to reading existing events, you can write event logs to Event Viewer by using the EventLog component.The EventLog component allows you to connect to Microsoft Windows Event Viewer on your local machine or on a remote machine.

You can access the EventLog component from the Components toolbox. Figure 17-8 shows the EventLog component in the Components toolbox.

Team-Fly®

INTERACTING WITH A MICROSOFT WORD DOCUMENT

Chapter 17

379

 

 

 

 

FIGURE 17-8 The EventLog component in the Components toolbox

Adding the EventLog Component to the Form

To include the EventLog component, drag the EventLog component from the Components toolbox to the Creative Learning form. The EventLog component with a name eventLog1 is added to the component tray. Change the Name property of the control to eventLog. Figure 17-9 shows the eventLog component added to the component tray.

FIGURE 17-9 The eventLog component added to the component tray

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();

382 Project 3 CREATING A CREATIVE LEARNING PROJECT

wdApp.Quit(ref optional, ref optional, ref optional);

wdApp=null;

watchDir.EnableRaisingEvents=true;

}

After the file is processed, you can move it the directory specified in the txtProcessedFile text box. To do this, add the following code to the Created event.

tryagain: try

{

File.Move(e.FullPath,txtProcessedFile.Text+e.Name);

}

catch

{

goto tryagain;

}

The File.Move() method call statement is enclosed in the try loop so that the application tries to move the processed file to the processed directory until the time the file closes and can be moved. The Move() method is used to move the processed file to the directory specified in the txtProcessedFile text box.The path of the source directory and destination directory are passed as parameters to the Move() method.

NOTE

The Move() method is used to move a specified object from the source directory to the destination directory. In addition, you can change the name of the object in the destination directory by passing the new name as a parameter to the Move() method.

The events that were generated are visible in Event Viewer. You can also create a list box that displays the event entries that are generated in Event Viewer for your Creative Learning application.

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.

384 Project 3 CREATING A CREATIVE LEARNING PROJECT

FIGURE 17-12 The Application Log node of Event Viewer

Figure 17-13 displays the error logs in the lstEvents list box.

FIGURE 17-13 The error logs in the lstEvents list box

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();

}

386 Project 3 CREATING A CREATIVE LEARNING PROJECT

After displaying the message box,you need to close the object of the StreamReader class. You can close the strRead object by using the Close() method of the StreamReader class. The Close() method closes the object and releases any resources associated with the strRead object.

Figure 17-14 shows the message box displaying the data from the Summary.xml document.

FIGURE 17-14 The message box displaying the data from the Summary.xml document

If the application generates an exception while reading data from an XML document, you can display the exception that is generated in another message box, as shown in the following statement:

catch(Exception exc)

{

MessageBox.Show(“An error was returned: “ + exc.Message + “Please check the destination folder for summary”);

}

Figure 17-15 displays the message box with an error.

FIGURE 17-15 The message box displaying an error message

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;