Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Manning - Windows Forms Programming With CSharp.pdf
Скачиваний:
72
Добавлен:
24.05.2014
Размер:
14.98 Mб
Скачать

18.2.2IMPLEMENTING THE SLIDE SHOW BEHAVIOR

Our user interface is ready to go. The following table details the steps required to implement this form to present a slide show to the user:

IMPLEMENT THE SLIDE SHOW BEHAVIOR

 

Action

Result

 

 

 

1

In the SlideShowForm.cs code

using Manning.MyPhotoAlbum;

 

window, Indicate that we will use

 

 

the MyPhotoAlbum library in this file.

 

 

 

 

2

Create two private fields in the class

private PhotoAlbum _album;

 

to hold the album and the current

private int _albumPos;

 

display position.

 

 

 

 

3

Modify the constructor to accept a

public SlideShowForm(PhotoAlbum album)

 

PhotoAlbum object and initialize

{

 

these private fields.

// Required for Form Designer support

 

InitializeComponent();

 

 

 

 

// Other initialization

 

 

_album = album;

 

 

_albumPos = 0;

 

 

}

 

 

 

4

Implement a SetInterval method

protected void SetInterval()

 

to calculate the timer interval based

{

 

on the value in the text box control.

int interval = 0;

 

try

 

 

 

Note: Since we do not prevent our

{

 

text box from containing letters, we

interval

 

= Convert.ToInt32(txtInterval.Text);

 

need to catch the possible excep-

 

}

 

tion here.

catch

 

 

{

 

 

// Reset interval value

 

 

txtInterval.Text = "2";

 

 

interval = 2;

 

 

}

 

 

slideTimer.Interval = interval * 1000;

 

 

}

 

 

 

5

Override the OnLoad method to:

protected override void OnLoad(EventArgs e)

 

a. Set the timer interval.

{

 

SetInterval();

 

b. Enable the timer.

slideTimer.Enabled = true;

 

c. Set the minimum and maximum

trackSlide.Minimum = 0;

 

value for the track bar based on

trackSlide.Maximum = _album.Count - 1;

 

the number of photos in the

base.OnLoad(e);

 

album.

}

 

 

 

 

 

TIMERS

615

IMPLEMENT THE SLIDE SHOW BEHAVIOR (continued)

 

Action

Result

 

 

 

6

Add a Paint event handler for the

private void pboxSlide_Paint

 

PictureBox control to do the

(object sender,

 

following:

System.Windows.Forms.PaintEventArgs e)

 

{

 

 

 

a. If the current position is out of

if (_albumPos >= _album.Count)

 

range, simply return.

return;

 

 

 

b. Load the current Photograph.

Photograph photo = _album[_albumPos];

 

c. Display the caption in the title bar.

if (photo != null)

 

{

 

d. Preserve the aspect ratio when

 

this.Text

 

drawing the image into the

= String.Format("{0} ({1:#}/{2:#})",

 

window.

photo.Caption,

 

_albumPos + 1, _album.Count);

 

 

 

 

e.Graphics.DrawImage(photo.Image,

 

 

photo.ScaleToFit(

 

 

pboxSlide.ClientRectangle));

 

 

}

 

 

else

 

 

e.Graphics.Clear(SystemColors.Control);

 

 

}

 

 

 

7

Add a Tick event handler for the

private void slideTimer_Tick

 

slideTimer component.

(object sender, System.EventArgs e)

 

How-to

{

 

 

 

This is the default event for this

 

 

component, so simply double-click

 

 

the timer in the component tray.

 

 

 

 

8

In this handler, increment the current

_albumPos ++;

 

album position.

 

 

 

 

9

If the position is passed the end of

if (_albumPos > _album.Count)

 

the album, reset the slide show as

{

 

follows:

btnStop.Text = "&Start";

 

_albumPos = 0;

 

 

 

a. Modify the Stop button text to be

trackSlide.Value = 0;

 

Start.

pboxSlide.Invalidate();

 

slideTimer.Enabled = false;

 

b. Reset the track bar value to zero.

 

}

 

c. Invalidate the picture box to draw

 

 

the initial photograph.

 

 

d. Disable the timer.

 

 

 

 

10

If the position is at the end of the

else if (_albumPos == _album.Count)

 

album, set the title bar to indicate

{

 

the slide show is finished.

this.Text = "Finished";

 

}

 

 

 

 

 

11

Otherwise, for a valid album index:

else

 

a. Invalidate the picture box to draw

{

 

pboxSlide.Invalidate();

 

the next image.

trackSlide.Value = _albumPos;

 

b. Set the track bar value to the cur-

}

 

 

 

rent position.

 

 

 

 

12

Reassign the interval value to pick up

// Reset the interval

 

any changes made by the user.

SetInterval();

 

 

}

 

 

 

616

CHAPTER 18 ODDS AND ENDS .NET

IMPLEMENT THE SLIDE SHOW BEHAVIOR (continued)

 

Action

Result

 

 

 

13

Add a Click event handler for the

private void btnClose_Click

 

Close button to close the form.

(object sender, System.EventArgs e)

 

 

{

 

 

this.Close();

 

 

}

 

 

 

14

Add a Click event handler for the

private void btnStop_Click

 

Stop button.

(object sender, System.EventArgs e)

 

 

{

 

 

 

15

If the current Text value is Stop,

if (btnStop.Text == "&Stop")

 

stop the timer and set the button

{

 

text to Resume.

// Stop

 

slideTimer.Stop();

 

 

 

Note: While our Stop button has

btnStop.Text = "Re&sume";

 

three different display strings, we

}

 

 

 

preserve the keyboard access key

 

 

of Alt+S in all three values.

 

 

 

 

16

For other text values, start the timer

else

 

and set the button text to Stop.

{

 

 

// Resume or Start

 

 

slideTimer.Start();

 

 

btnStop.Text = "&Stop";

 

 

}

 

 

}

 

 

 

17

Add a Scroll event handler for the

private void trackSlide_Scroll

 

TrackBar control.

(object sender, System.EventArgs e)

 

Note: This is the default event for

{

 

 

 

the track bar control, and occurs

 

 

when the user manually adjusts the

 

 

slider position.

 

 

 

 

18

In this handler:

_albumPos = trackSlide.Value;

 

a. Set the album position to the new

pboxSlide.Invalidate();

 

}

 

value.

 

 

b. Invalidate the picture box to draw

 

 

the selected photo.

 

 

 

 

19

Add a Resize event handler for the

private void pboxSlide_Resize

 

PictureBox control to invalidate the

(object sender, System.EventArgs e)

 

control and redraw the image.

{

 

pboxSlide.Invalidate();

 

 

 

 

}

 

 

 

20

Back in the MainForm class, add a

private void menuSlideShow_Click

 

Click event handler for the Slide

(object sender, System.EventArgs e)

 

Show menu to create and display a

{

 

using (SlideShowForm f

 

SlideShowForm dialog.

 

= new SlideShowForm(_album))

 

 

{

 

 

// Display slide show as modal dialog

 

 

f.ShowDialog();

 

 

}

 

 

}

 

 

 

TIMERS

617