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

works much like an array of Image objects, and can be thought of as such. Classes that use this construct specify an index into the list, designating which image they wish to display. Typically, a class that uses such a list provides an ImageList property to specify a list to use, and classes that display an image out of such lists provide an ImageIndex property to indicate which image to display.

In Visual Studio .NET, an ImageList can be associated with a Form graphically and assigned to one or more controls within that form using the Windows Forms Designer and the Properties windows. Visual Studio creates the list within the set of components for the Form, so that it is disposed when the application disposes of the Form via the Close or Dispose methods. We will look at the code generated for this purpose in a moment.

13.2.2CREATING AN IMAGE LIST

For the ToolBar object we created in our MainForm class, we need an ImageList containing the set of images required for our ToolBarButton objects. We will use some of the bitmaps and icons in the common image directory provided with Visual Studio. If you skipped chapter 12, or were simply not paying attention, this directory is typically “C:\Program Files\Microsoft Visual Studio .NET\Common7\Graphics.”

The following steps create an ImageList and associate the required image files with it.

Set the version number of the MyPhotos application to 13.2.

CREATE AN IMAGE LIST FOR OUR TOOLBAR

 

Action

Result

 

 

 

1

Associate an ImageList

The new image list is shown in the component tray area

 

component with the MainForm

below the form.

 

form in the MainForm.cs

 

 

[Design] window.

 

 

Note: Windows Forms compo-

 

 

nents such as the ImageList

 

 

class are available from the

 

 

Toolbox window, just like Win-

 

 

dows Forms controls.

 

 

 

 

2

Set the (Name) property for the

 

 

image list to imageListToolBar.

 

 

 

 

3

Display the Image Collection

A blank Image Collection Editor dialog box appears. This

 

Editor window.

dialog with all eight images added is shown in step 5.

 

How-to

 

 

Click the button next to the

 

 

Images item in the Properties

 

 

window.

 

 

 

 

IMAGE LISTS

417

CREATE AN IMAGE LIST FOR OUR TOOLBAR (continued)

 

 

Action

Result

 

 

 

4

Add an image for creating a new

The image appears as member 0 within the Image

 

album to the collection.

Collection Editor dialog.

 

How-to

 

 

a. Click the Add button.

 

 

b. In the file dialog, locate the

 

 

 

NEW.BMP file under the

 

 

 

common image directory in

 

 

 

the “bitmaps/OffCtlBr/Small/

 

 

 

Color” directory.

 

 

c. Click the Open button to add

 

 

 

the image.

 

 

 

 

5

Similarly, add the following

 

 

images files to the collection.

 

 

bitmaps/OffCtlBr/Small/Color/

 

 

 

OPEN.BMP

 

 

bitmaps/OffCtlBr/Small/Color/

 

 

 

SAVE.BMP

 

 

• icons/arrows/ARW08LT.ICO

 

 

• icons/arrows/ARW08RT.ICO

 

 

icons/Writing/BOOK02.ICO

 

 

icons/Traffic/TRFFC10C.ICO

 

 

icons/Traffic/TRFFC10A.ICO

 

 

 

 

6

Click the OK button to save the

The assigned images are stored in the image list.

 

changes.

 

 

 

 

 

This creates a collection of all the images we will need for our toolbar. An excerpt of the code generated by these changes is as follows.

. . .

namespace MyPhotos

{

. . .

public class MainForm : System.Windows.Forms.Form

{

. . .

private System.ComponentModel.IContainer components = null;

. . .

private System.Windows.Forms.ImageList imageListToolBar;

. . .

protected override void Dispose( bool disposing )

{

if( disposing )

{

418

CHAPTER 13 TOOLBARS AND TIPS

if (components != null)

 

 

 

 

 

{

b Dispose of the

 

 

 

components.Dispose();

 

 

 

}

 

components object

 

 

 

}

 

 

 

 

 

base.Dispose( disposing );

 

 

 

 

 

}

 

 

 

 

 

. . .

 

 

 

 

 

private void InitializeComponent()

Create the image

c

 

 

 

 

{

 

list within the

 

 

 

. . .

 

components container

 

 

 

this.imageListToolBar

 

 

 

 

 

 

 

 

 

 

= new System.Windows.Forms.ImageList(this.components);

 

 

 

 

 

 

. . .

 

 

 

 

 

//

 

Load the

d

// imageListToolBar

 

//

 

image stream

 

 

for the list

 

this.imageListToolBar.ColorDepth

 

 

 

 

 

=System.Windows.Forms.ColorDepth.Depth8Bit; this.imageListToolBar.ImageSize = new System.Drawing.Size(16, 16); this.imageListToolBar.ImageStream

=((System.Windows.Forms.ImageListStreamer)

(resources.GetObject("imageListToolBar.ImageStream")));

this.imageListToolBar.TransparentColor

= System.Drawing.Color.Transparent;

. . .

}

The annotated lines merit some additional discussion.

bThis line disposes of the components container, which in turn disposes of any components contained within this object. The controls on the form are contained within the Form object itself. As a result, the resources allocated to the controls in the form are disposed by the Form.Dispose method itself. This works for components such as the MainMenu and StatusBarPanel objects as well, since the menu is assigned to the form, and status bar panels are contained within status bar controls.

cThis line initializes an ImageList object and assigns it to the components container. This is required to ensure that the list is properly disposed of by the Form object’s Dispose method. If you create your own ImageList objects manually, be sure to dispose of the object when you are finished in order to free any Windows or file system resources assigned to the list.

dLike the bitmap files we created in the previous chapter, a ResourcesManager object is used to retrieve the stream of image data from a .resources file. This data is

retrieved as an ImageListStream object. This object is assigned to the ImageStream property and used internally by the ImageList class to manage and access the images in the collection.

IMAGE LISTS

419

imageList-

On this last point for our code, note that the MyPhotos project directory in the file system contains a MainForm.resx file that defines the binary form of the image stream for our list. This is very similar to how our bitmap images were defined for our Button objects in the previous chapter. An excerpt of this file follows. In addition to the definition of the image stream, note how the positioning of objects displayed in the component tray area of Visual Studio, such as the location of our

ToolBar object, are also stored in this file

<?xml version="1.0" encoding="utf-8"?> <root>

. . .

<data name="imageListToolBar.Location" type="System.Drawing.Point, System.Drawing,

Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <value>255, 17</value>

</data>

<data name="imageListToolBar.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">

<value>

AAEAAAD/////AQAAAAAAAAAMAgAAAFpTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0xLjAuMzMw

MC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZT

eXN0ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMA

. . .

</value>

. . .

</root>

This completes our discussion on image lists for now. Let’s get back to the ToolBar for our application and create the ToolBarButton components using the images we just assigned to our list.

13.3TOOLBAR BUTTONS

Now that we have some understanding of image lists, we can return to the topic of toolbar buttons. This section adds the ten buttons, both images and separators, we decided to place on our toolbar. The discussion is divided into two parts. First we will look at the most basic of styles, the push button. Then we’ll tackle the dropdown and toggle styles of ToolBarButton objects.

13.3.1ADDING A PUSH BUTTON

We have a toolbar and we have an image list, so let’s get to it. We will start with the push buttons related to the File menu, and later hook up these buttons to their corresponding menu item, after which we will create the buttons associated with the Next and Previous menu items.

420

CHAPTER 13 TOOLBARS AND TIPS