Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# ПІДРУЧНИКИ / c# / Manning - Windows.forms.programming.with.c#.pdf
Скачиваний:
108
Добавлен:
12.02.2016
Размер:
14.98 Mб
Скачать

Explain the difference between modal and modeless dialogs.

Create dialog boxes using the Form class.

Before we get into generating custom dialog boxes, we will first look at how simple messages are displayed using the MessageBox class.

8.1MESSAGE BOXES

Developers, especially object-oriented developers, are always looking for shortcuts. Classes such as OpenFileDialog and SaveFileDialog not only provide a standard way to prompt a user for files, they also save programmers a lot of time and effort by encapsulating the required window display and interaction code. Another common task programmers face is the need to display a simple message to the user. Our photo album application, for example, should really display an error message when an album cannot be saved successfully, or it could pose a question by asking the user if they would like to save the album to an alternate file location.

The .NET Framework provides a MessageBox class for this purpose. This class is very similar to the MFC function of the same name. This section will show how this class is used to handle simple interactions with a user. While this class is not actually a Form object, it is the most basic type of modal dialog box.

All dialog boxes are either modal or modeless. A modal dialog box requires the user to respond before the associated program will continue. Modeless or nonmodal dialog boxes allow the application to continue while the dialog box is displayed.

All MessageBox windows are modal, while Form windows are modal if invoked via the Form.ShowDialog method and modeless if invoked via the Form.Show method.

Figure 8.1 These examples show the four types of icons available to

MessageBox dialogs.

MESSAGE BOXES

225

Figure 8.1 shows some sample message boxes with various settings. Note the different button configurations, and how the Question Icon dialog has defined No as the default button. An overview of the MessageBox class is provided in .NET Table 8.1.

.NET Table 8.1 MessageBox class

The MessageBox class represents a modal dialog box that displays a message or question to the user and waits for their response. This class is part of the System.Windows.Forms namespace. A MessageBox cannot be instantiated as an object with the new keyword; instead the static Show method is used to display the dialog.

By default, a message box displays with no icon and a single OK button. The Show method is overloaded to allow these and other settings to be customized. There are four enumerations used for this purpose: MessageBoxButtons, MessageBoxIcon, MessageBoxDefaultButton, and MessageBoxOptions. In the following table, the enumeration values for some of these four types are included, since these types are only used with the MessageBox.Show method.

Public Static

Show

Displays a message box and returns the

 

DialogResult enumeration value corresponding to

Methods

 

 

the button selected by the user.

 

 

 

 

 

 

OK

The message box should contain an OK button only.

 

OKCancel

The message box should contain an OK and Cancel

MessageBoxButtons

 

button.

YesNo

The message box should contain a Yes and No

Enumeration Values

 

 

button.

 

YesNoCancel

The message box should contain a Yes, No, and

 

 

Cancel button.

 

 

 

 

Error

The message box should contain an error symbol, a

 

 

white X in a red circle. Use this for unexpected

 

 

problems that prevent an operation from continuing.

 

Information

The message box should contain an information

 

 

symbol, a lower case letter ‘i’ in a circle. Use this for

 

 

general messages about the application such as a

MessageBoxIcon

 

status or notification.

 

 

Enumeration Values

Question

The message box should contain a question mark

 

 

 

symbol. Use this for Yes/No questions where a

 

 

choice by the user is required.

 

Warning

The message box should contain a warning symbol,

 

 

an exclamation point in a yellow triangle. Use this for

 

 

problems that may interfere with the ability of an

 

 

operation to continue.

 

 

 

MessageBoxDefault-

Button1

The first button in the message box is the default.

 

 

Button Enumeration

Button2

The second button is the default.

Values

Button3

The third button is the default.

 

 

 

 

226

CHAPTER 8 DIALOG BOXES

8.1.1THE MESSAGEBOX.SHOW METHOD

A MessageBox instance cannot be instantiated. Instead, the Show method is used to create the message dialog and return the result. There are a number of overloads available for this method, from a version that takes a single message string to one that accepts a parameter for everything from the title bar text to which button should be the default. Various forms of this method are shown in the following signatures. The comment preceding each signature refers to the characters in bold.

//The return value indicates which button was clicked by the user public static DialogResult Show( string text );

//Displays the dialog in front of the specified window object

public static DialogResult Show( IWin32Window owner, string text );

// Accepts a message string and title bar caption

public static DialogResult Show( string text, string caption );

// Displays the dialog with the specified buttons public static DialogResult Show( IWin32Window owner,

string text, string caption,

MessageBoxButtons buttons );

// The penultimate Show method: an icon, default button, and options public static DialogResult Show( IWin32Window owner,

string text, string caption,

MessageBoxButtons buttons,

MessageBoxIcon icon,

MessageBoxDefaultButton defaultButton,

MessageBoxOptions options );

Turning back to our MyPhotos application, the addition of a message box would be beneficial in some of the situations we have already encountered. These include:

When an error occurs while trying to open an existing album.

When an error occurs while trying to save the current album.

When the current album has changed and is about to be discarded.

We will add a MessageBox to our program for each of these instances.

8.1.2CREATING AN OK DIALOG

When we are unable to open a selected album, there is not much to do other than inform the user that something is wrong. We will use an error dialog since a failure here is not normally expected. The resulting dialog is shown in figure 8.2.

Figure 8.2

This message box is displayed when the album contains an unrecognized version number.

MESSAGE BOXES

227

Let’s add the code to create this dialog whenever an unexpected problem occurs while opening the file

Set the version number of the MyPhotos application to 8.1.

HANDLE EXCEPTION IN MENUOPEN_CLICK METHOD

 

Action

Result

 

 

 

1

Locate the

private void menuOpen_Click

 

menuOpen_Click method

(object sender, System.EventArgs e)

 

in the MainForm.cs source

{

 

. . .

 

file.

 

 

 

 

 

2

Enclose the code to open

if (dlg.ShowDialog() == DialogResult.OK)

 

the album in a try block.

{

 

 

try

 

 

{

 

 

// Open the new album.

 

 

_album.Open(dlg.FileName);

 

 

_album.FileName = dlg.FileName;

 

 

_bAlbumChanged = false;

 

 

this.Invalidate();

 

 

}

 

 

 

3

Catch any Exception that

catch (Exception ex)

 

occurs.

 

 

 

 

4

Display the dialog in the

{

 

catch block.

MessageBox.Show(this,

 

 

"Unable to open file " + dlg.FileName

 

 

+ "\n (" + ex.Message + ")",

 

 

"Open Album Error",

 

 

MessageBoxButtons.OK,

 

 

MessageBoxIcon.Error);

 

 

}

 

 

}

 

 

. . .

 

 

}

 

 

Note: The text string is constructed using the + (plus

 

 

sign) notation for strings. Also note that a new line is

 

 

inserted in the dialog with the \n character.

 

 

 

In this code, we cheated a little by catching any and all Exception objects in the catch block. It is normally safer to catch specific exceptions that may occur so you can provide feedback or take actions based on the specific error. In this code, an IOException will occur if an unexpected error occurs during a file I/O operation. If you recall, the PhotoAlbum.Open method throws an IOException explicitly if the version number in the file is not recognized.

It is also worth noting that we ignore the result returned by the Show method, since there is only a single OK button in the dialog.

228

CHAPTER 8 DIALOG BOXES

Соседние файлы в папке c#