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

Our check box example does have one drawback. If the user clicks the check box, then he or she is forced to enter a password before leaving the txtAlbumPwd control. This could be a little frustrating if the user then wishes to uncheck the check box. We alleviate this a little by providing a default text string in the txtAlbumPwd control. From a book perspective, this was a good place to demonstrate the Focus method and validation events, so we will allow this little design anomaly to remain. In practice, an alternative might be to ensure that the password is nonempty as part of the

ValidPasswords method.

This completes our discussion of check boxes. The last step here is to add the logic to reset and save our dialog box values, and display the form from our MyPhotos application.

9.3.6Adding AlbumEditDlg to our main form

The final task required so that we can see our AlbumEditDlg dialog in action is to handle the reset and save logic required and link the dialog into our application. Let’s make this happen.

FINISH THE ALBUMEDITDLG FORM

 

Action

Result

 

 

 

1

In the AlbumEditDlg.cs source

private PhotoAlbum _album;

 

window, add a private

 

 

PhotoAlbum variable to hold the

 

 

album to edit.

 

 

 

 

2

Modify the constructor to accept

public AlbumEditDlg(PhotoAlbum album)

 

a PhotoAlbum parameter.

{

 

 

 

3

Within the constructor, set the

. . .

 

album variable and call

// Initialize the dialog settings

 

ResetSettings to initialize the

_album = album;

 

ResetSettings();

 

dialog’s controls.

 

}

 

 

 

310

CHAPTER 9 BASIC CONTROLS

FINISH THE ALBUMEDITDLG FORM (continued)

 

Action

Result

 

 

 

4

Implement ResetSettings to

protected override void ResetSettings()

 

set the controls to their

{

 

corresponding settings in the

// Set file name

 

txtAlbumFile.Text = _album.FileName;

 

current photograph.

 

 

 

How-to

// Set title, and use in title bar

 

this.txtTitle.Text = _album.Title;

 

a. Assign the album file name and

 

this.Text = String.Format(

 

title text boxes.

"{0} - Album Properties",

 

b. Place the album title in the title

txtTitle.Text);

 

 

 

bar as well.

// Set display option values

 

c. Set the radio buttons based on

_selectedDisplayOption

 

= _album.DisplayOption;

 

the DisplayOption setting for

 

switch (_selectedDisplayOption)

 

the album.

{

 

d. Check the check box button if

case PhotoAlbum.DisplayValEnum.Date:

 

this.rbtnDate.Checked = true;

 

the album contains a non-

 

break;

 

empty password.

 

 

e. Assign both password text

case PhotoAlbum.DisplayValEnum.FileName:

 

this.rbtnFileName.Checked = true;

 

boxes to the current password.

 

break;

 

 

case PhotoAlbum.DisplayValEnum.Caption:

 

 

default:

 

 

this.rbtnCaption.Checked = true;

 

 

break;

 

 

}

 

 

string pwd = _album.Password;

 

 

cbtnPassword.Checked

 

 

= (pwd != null && pwd.Length > 0);

 

 

txtAlbumPwd.Text = pwd;

 

 

txtConfirmPwd.Text = pwd;

 

 

}

 

 

 

5

Implement the SaveSettings

protected override bool SaveSettings()

 

method to store the results after

{

 

the user has clicked OK.

bool valid = ValidPasswords();

 

 

 

How-to

if (valid)

 

{

 

a. Use the ValidPasswords

 

_album.Title = txtTitle.Text;

 

method to verify the pass-

_album.DisplayOption

 

words settings.

= this._selectedDisplayOption;

 

b. Store the new settings only if

if (cbtnPassword.Checked)

 

the passwords were valid.

_album.Password = txtAlbumPwd.Text;

 

c. Return whether the settings

else

 

_album.Password = null;

 

were successfully stored.

 

}

 

 

return valid;

 

 

}

 

 

 

6

Add a TextChanged event

private void txtTitle_TextChanged

 

handler to the txtTitle control

(object sender, System.EventArgs e)

 

to update the title bar as the title

{

 

this.Text = String.Format(

 

text is modified.

 

"{0} - Album Properties",

 

 

txtTitle.Text);

 

 

}

 

 

 

BUTTON CLASSES

311

This completes the dialog. Now let’s invoke this dialog from our main application window.

Set the version number of the MyPhotos application to 9.3.

 

 

 

 

DISPLAY THE ALBUMEDITDLG FORM

 

 

 

 

 

 

 

 

 

 

Action

Result

 

 

 

 

 

 

7

In the MainForm.cs [Design]

 

 

window, add a new Album

 

 

Properties menu item to the

 

 

Edit menu.

 

 

 

 

Settings

 

 

 

 

 

 

 

 

 

 

Property

 

Value

 

 

 

(Name)

 

menuAlbumProp

 

 

 

Text

 

A&lbum

 

 

 

 

 

Properties

 

 

 

 

 

 

 

 

8

Add a Click handler for this

private void menuAlbumProp_Click

 

menu to display the

(object sender, System.EventArgs e)

 

AlbumEditDlg form.

{

 

using (AlbumEditDlg dlg

 

 

 

 

 

 

 

 

 

 

 

 

= new AlbumEditDlg(_album))

 

 

 

 

 

 

{

 

 

 

 

 

 

if (dlg.ShowDialog()

 

 

 

 

 

 

== DialogResult.OK)

 

 

 

 

 

 

{

 

 

 

 

 

 

// Update window with changes

 

 

 

 

 

 

this._bAlbumChanged = true;

 

 

 

 

 

 

SetTitleBar();

 

 

 

 

 

 

this.Invalidate();

 

 

 

 

 

 

}

 

 

 

 

 

 

}

 

 

 

 

 

 

}

 

 

 

 

 

 

9

Also, make use of the new

protected override void OnPaint(. . .)

 

CurrentDisplayText

{

 

if (_album.Count > 0)

 

property in the OnPaint

 

{

 

method.

 

 

 

 

 

 

 

. . .

 

 

 

 

 

 

// Update the status bar.

 

 

 

 

 

 

sbpnlFileName.Text

 

 

 

 

 

 

= _album.CurrentDisplayText;

 

 

 

 

 

 

. . .

 

 

 

 

 

 

}

 

 

 

 

 

 

 

And we are finished. Compile and run the application to display properties for an album. Note the following aspects of the Album Properties dialog:

This dialog can be displayed for an empty album, as opposed to the Photo Properties dialog, which requires at least one photograph in the album in order to appear.

The title bar updates as the title changes.

The radio buttons receive focus as a group. If you use the Tab key to move through the form, this is readily apparent. Note how the arrow keys can be used to modify the selected radio button from the keyboard.

312

CHAPTER 9 BASIC CONTROLS

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