Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Microsoft C# Professional Projects - Premier Press.pdf
Скачиваний:
178
Добавлен:
24.05.2014
Размер:
14.65 Mб
Скачать

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;

388

Project 3

CREATING A CREATIVE LEARNING PROJECT

 

 

private

System.Diagnostics.EventLog eventLog;

 

 

 

 

private

System.Windows.Forms.GroupBox groupEventLog;

 

 

private System.Windows.Forms.ListBox lstEvents;

 

 

private

System.Windows.Forms.Button btnRefresh;

 

 

private

System.Windows.Forms.TextBox txtDest;

 

 

private System.Windows.Forms.Label label2;

 

 

private

System.Windows.Forms.Button btnSummary;

 

 

private

System.Diagnostics.EventLog eventLog1;

 

 

private System.ComponentModel.IContainer components;

 

 

public frmCreative()

 

Y

 

 

{

 

 

 

 

 

L

 

 

InitializeComponent();

 

 

F

 

 

}

 

 

 

 

M

 

 

 

 

 

 

 

 

protected override void Dispose( bool disposing )

 

 

{

A

 

 

 

if( disposing )

 

 

 

 

 

E

 

 

 

{

T

 

 

 

 

 

 

 

if (components != null)

{

components.Dispose();

}

}

base.Dispose( disposing );

}

static void Main()

{

Application.Run(new frmCreative());

}

private void frmCreative_Load(object sender, System.EventArgs e)

{

txtSource.Text=”D:\\Creative\\Source\\”; txtProcessedFile.Text=”D:\\Creative\\Processed\\”; txtDest.Text=”D:\\Creative\\Destination\\”; optGenerateLog.Checked=true;

}

Team-Fly®

INTERACTING WITH A MICROSOFT WORD DOCUMENT

Chapter 17

389

 

 

 

 

private void btnOK_Click(object sender, System.EventArgs e)

{

if (!Directory.Exists(txtSource.Text))

{

errMessage.SetError(txtSource,”Invalid source directory”); txtSource.Focus();

tabControl1.SelectedTab=tabSource; return;

}

else errMessage.SetError(txtSource,””);

if (!Directory.Exists(txtDest.Text))

{

errMessage.SetError(txtDest,”Invalid destination directory”); txtDest.Focus();

tabControl1.SelectedTab=tabDest; return;

}

else errMessage.SetError(txtDest,””);

if (!Directory.Exists(txtProcessedFile.Text))

{

errMessage.SetError(txtProcessedFile,”Invalid processed file directory”);

txtProcessedFile.Focus(); tabControl1.SelectedTab=tabSource; return;

}

else errMessage.SetError(txtProcessedFile,””); watchDir.Path=txtSource.Text; watchDir.EnableRaisingEvents=true; icoNotify.Icon=m_Ready; icoNotify.Visible=true; this.ShowInTaskbar=false;

this.Hide();

}

390 Project 3 CREATING A CREATIVE LEARNING PROJECT

private void txtSource_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)

{

if (Directory.Exists(txtSource.Text)) txtSource.BackColor=Color.White;

else txtSource.BackColor=Color.Pink;

}

private void txtProcessedFile_KeyUp(object sender, System.Windows.Forms

.KeyEventArgs e)

{

if (Directory.Exists(txtProcessedFile.Text)) txtProcessedFile.BackColor=Color.White;

else txtProcessedFile.BackColor=Color.Pink;

}

private void menuItem3_Click(object sender, System.EventArgs e)

{

Application.Exit();

}

private void mnuConfigure_Click(object sender, System.EventArgs e)

{

icoNotify.Visible=false; this.ShowInTaskbar=true; this.Show();

}

private void btnCancel_Click(object sender, System.EventArgs e)

{

Application.Exit();

}

private void icoNotify_DoubleClick(object sender, System.EventArgs e)

{

icoNotify.Visible=false; this.ShowInTaskbar=true;

INTERACTING WITH A MICROSOFT WORD DOCUMENT

Chapter 17

391

 

 

 

 

this.Show();

}

private void watchDir_Created(object sender, System.IO.FileSystemEventArgs e)

{

watchDir.EnableRaisingEvents=false; icoNotify.Icon=m_Info; icoNotify.Text=”Processed: “+ e.Name;

Word.Application wdApp= new Word.ApplicationClass(); object optional=System.Reflection.Missing.Value; XmlTextWriter xmlWrite;

xmlWrite= new XmlTextWriter(txtDest.Text + “Summary.xml”,null); try

{

Word.Document Doc = new Word.DocumentClass(); object filename=e.FullPath;

Doc=wdApp.Documents.Open(ref filename, ref optional, ref optional, ref optional,ref optional,ref optional,ref optional,ref optional, ref optional,ref optional,ref optional,ref optional);

Word.Range wdRange; wdRange=Doc.Paragraphs.Item(2).Range; string strMemo, strAmount;

int intParacount; strMemo=wdRange.Text; strMemo=strMemo.Substring(15,4); intParacount=Doc.Paragraphs.Count; intParacount=intParacount-2;

wdRange=Doc.Paragraphs.Item(intParacount).Range; object count=”-1”;

object wdCharacter=”1”; wdRange.MoveEnd(ref wdCharacter,ref count); strAmount=wdRange.Text; strAmount=strAmount.Substring(23); xmlWrite.Formatting=Formatting.Indented;

xmlWrite.WriteDocType(“Sales”,null,null,null); xmlWrite.WriteComment(“Summary of sales at Creative Learning”); xmlWrite.WriteStartElement(“Sales”); xmlWrite.WriteStartElement(Convert.ToString(DateTime.Today));

392 Project 3 CREATING A CREATIVE LEARNING PROJECT

xmlWrite.WriteElementString(“Memo”,strMemo); xmlWrite.WriteElementString(“Amount”,strAmount); xmlWrite.WriteEndElement(); xmlWrite.WriteEndElement(); icoNotify.Icon=m_Ready;

}

catch (Exception catchException)

{

icoNotify.Icon=m_Error; icoNotify.Text=”Error in “ + e.Name; if (optGenerateLog.Checked==true)

eventLog.WriteEntry(e.Name + “: “ + catchException.Message);

}

finally

{

xmlWrite.Flush(); xmlWrite.Close();

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

watchDir.EnableRaisingEvents=true;

}

tryagain: try

{

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

}

catch

{

goto tryagain;

}

}

INTERACTING WITH A MICROSOFT WORD DOCUMENT

Chapter 17

393

 

 

 

 

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

}

}

}

private void btnSummary_Click(object sender, System.EventArgs e)

{

StreamReader strRead; try

{

strRead= new StreamReader(txtDest.Text+”Summary.xml”); MessageBox.Show(strRead.ReadToEnd(),txtDest.Text+”Summary.xml”,

MessageBoxButtons.OK,MessageBoxIcon.Information); strRead.Close();

}

catch(Exception exc)

{

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

}

private void txtDest_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)

{

if (Directory.Exists(txtDest.Text)) txtDest.BackColor=Color.White;

else