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

Password—if present, a password is required to open the album. We will use a CheckBox to indicate whether a password is desired, and TextBox controls to accept and confirm the password.

A dialog to support these new settings is shown in figure 9.5. Of course, we will need some additional infrastructure in our PhotoAlbum class to support these new settings.

Figure 9.5

Note how the AlbumEditDlg modifies the Panel control inherited from BaseEditDlg as compared with the PhotoEditDlg just completed. This is possible since the panel is a protected member of the base form.

9.3.1EXPANDING THE PHOTOALBUM CLASS

In order to support title, display name, and password settings in our albums, we need to make a few changes. For starters, let’s add some variables to hold these values and properties to provide external access.

Set the version number of the MyPhotoAlbum library to 9.3.

ADD NEW SETTINGS TO THE PHOTOALBUM CLASS

 

Action

Result

 

 

 

1

In the PhotoAlbum.cs file, add

private string _title;

 

some variables to hold the new

private string _password;

 

title, password, and display option

public enum DisplayValEnum {

 

settings.

 

FileName, Caption, Date

 

 

};

 

 

private DisplayValEnum _displayOption

 

 

= DisplayValEnum.Caption;

 

 

 

BUTTON CLASSES

293

ADD NEW SETTINGS TO THE PHOTOALBUM CLASS

 

Action

Result

 

 

 

2

Add properties to set and retrieve

public string Title

 

these values.

{

 

 

get { return _title; }

 

 

set { _title = value; }

 

 

}

 

 

public string Password

 

 

{

 

 

get { return _password; }

 

 

set { _password = value; }

 

 

}

 

 

public DisplayValEnum DisplayOption

 

 

{

 

 

get { return _displayOption; }

 

 

set { _displayOption = value; }

 

 

}

 

 

 

3

Modify the OnClear method to

protected override void OnClear()

 

reset these settings when the

{

 

album is cleared.

_currentPos = 0;

 

_fileName = null;

 

 

 

 

_title = null;

 

 

_password = null;

 

 

_displayOption = DisplayValEnum.Caption;

 

 

. . .

 

 

}

 

 

 

Next, we need to store and retrieve these values in the Save and Open methods. This will also require us to create a new version of our file. The new version will be 93, to match the current section of the book. Continuing the previous steps:

UPDATE SAVE METHOD IN PHOTOALBUM CLASS

 

Action

Result

 

 

 

4

Change the current version setting

private const int CurrentVersion = 93;

 

to 93.

 

 

 

 

5

Update the Save method to store

public void Save(string fileName)

 

the new album settings.

{

 

 

. . .

 

 

try

 

 

{

 

 

sw.WriteLine

 

 

(CurrentVersion.ToString());

 

 

// Save album properties

 

 

sw.WriteLine(_title);

 

 

sw.WriteLine(_password);

 

 

sw.WriteLine(Convert.ToString(

 

 

(int)_displayOption));

 

 

// Store each photo separately

 

 

. . .

 

 

}

 

 

 

294

CHAPTER 9 BASIC CONTROLS

Similar changes are required for the Open method. To make this code a little more readable, we will extract the code to read the album data into a separate method.

UPDATE OPEN METHOD IN PHOTOALBUM CLASS

 

Action

 

Result

 

 

 

6

Modify the Open method to use

public void Open(string fileName)

 

a new ReadAlbumData method.

{

 

 

 

. . .

 

 

try

 

 

 

{

 

 

 

// Initialize as a new album

 

 

Clear();

 

 

this._fileName = fileName;

 

 

ReadAlbumData(sr, version);

 

 

// Check for password

 

 

//

(we’ll deal with this shortly)

 

 

Photograph.ReadDelegate PhotoReader;

 

 

switch (version)

 

 

{

 

 

 

 

. . .

 

 

 

case 92:

 

 

 

case 93:

 

 

 

PhotoReader =

 

 

 

new Photograph.ReadDelegate(

 

 

 

Photograph.ReadVersion92);

 

 

 

break;

 

 

 

. . .

 

 

}

 

 

 

. . .

 

 

}

 

 

 

 

7

Implement the new

protected void ReadAlbumData

 

ReadAlbumData to read in the

(StreamReader sr, int version)

 

album-related information from

{

 

 

// Initialize settings to defaults

 

an open stream.

 

_title = null;

 

 

_password = null;

 

 

_displayOption

 

 

 

= DisplayValEnum.Caption;

 

 

if (version >= 93)

 

 

{

 

 

 

// Read album-specific data

 

 

_title = sr.ReadLine();

 

 

_password = sr.ReadLine();

 

 

_displayOption = (DisplayValEnum)

 

 

 

Convert.ToInt32(sr.ReadLine());

 

 

}

 

 

 

// Initialize title if none provided

 

 

if (_title == null || _title.Length == 0)

 

 

{

 

 

 

_title = Path.

 

 

 

GetFileNameWithoutExtension(_fileName);

 

 

}

 

 

 

}

 

 

 

 

 

Our PhotoAlbum class can now store and retrieve these settings in the album file. We can make immediate use of these new settings within the PhotoAlbum class.

BUTTON CLASSES

295

9.3.2USING THE NEW ALBUM SETTINGS

Before we create the Album Properties form, let’s make use of our new settings within the PhotoAlbum class. The title is not used internally, but the password and display settings are for internal use. The display option indicates which Photograph property should be displayed to represent the photo for the album. This will be used by our main form to decide which string to display on the status bar panel.

The password setting is required when opening the album. When this field is set, the Open method should prompt for the password before it reads in the file. This requires a small dialog box to request this string from the user.

We will provide support for the display option first.

SUPPORT DISPLAY TEXT OPTION

 

Action

Result

 

 

 

1

In the PhotoAlbum.cs file, add a

public string GetDisplayText(Photograph photo)

 

new GetDisplayText method

{

 

to return the display string for a

 

 

given Photograph object.

 

 

 

 

2

Implement this method by using

switch (this._displayOption)

 

the DisplayOption property to

{

 

determine the appropriate value

case DisplayValEnum.Caption:

 

default:

 

to return.

 

return photo.Caption;

 

 

case DisplayValEnum.Date:

 

 

return photo.DateTaken.ToString("g");

 

 

case DisplayValEnum.FileName:

 

 

return Path.GetFileName(photo.FileName);

 

 

}

 

 

}

 

 

 

3

Also add a CurrentDisplay-

public string CurrentDisplayText

 

Text property to return this

{

 

value for the current photo.

get { return GetDisplayText(CurrentPhoto); }

 

}

 

 

 

 

 

This code is fairly straightforward. One new feature is the ability to provide a formatting code to the DateTime.ToString method.

return photo.DateTaken.ToString("g");

The "g" string used here causes the short form of the associated DateTime structure to be returned. We will discuss additional formatting conventions for DateTime structures when we discuss the DateTimePicker control in chapter 11.

For the password setting, we require a new dialog to permit this string to be entered by the user when an album is opened. The following steps create the dialog for this purpose:

296

CHAPTER 9 BASIC CONTROLS

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