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

With this change, our MDI application is ready. Compile and run the application and try to find an error.1

TRY IT! We have been careful to use the IsMdiChild property in all our changes to the MainForm.cs source file to ensure that the application can run as a single document interface or a multiple document interface. Test this out by modifying the Startup Object in the properties for the MyPhotos project to use the MainForm.Main method. Recompile the application and verify that it now runs as an SDI application. Change it back to an MDI application by setting the Startup Object to ParentForm.Main.

Our final change in this chapter will be the addition of layout management for our MDI child forms.

16.5MDI CHILD WINDOW MANAGEMENT

Ultimately, an MDI application is simply a collection of Forms displayed in a parent window. The .NET Framework provides some assistance in managing these forms within this parent. In this section we will discuss child form layout and how to show the active forms in a menu. The Form class contains a LayoutMdi method for the former, while the MenuItem class contains an MdiList property for the latter. A new top-level Window menu, as shown in figure 16.9, will make use of these constructs.

Figure 16.9 The new Window menu for our application will support options related to managing child forms within the parent window.

1 Of course, if you do find an error here or elsewhere in the book, please send me an email so the correction can be posted online and the error corrected in the next edition.

MDI CHILD WINDOW MANAGEMENT

557

We will begin with the automatic layout of MDI child forms.

16.5.1ARRANGING MDI FORMS

In an MDI application, as well as on the Windows desktop, a number of windows are created and strewn about in various locations. It would be nice if our application permitted automatic organization of the windows at the user’s request. This would allow the user to immediately see all open windows and select the desired one.

Such support is provided by the LayoutMdi method of the Form class. This method accepts an enumeration value specifying the type of layout to apply to the MDI container, as shown by the following signature:

public void LayoutMdi( MdiLayout layoutValue );

This method is called from the MDI container form, in our case the ParentForm class. The MdiLayout enumeration is summarized in .NET Table 16.3. To demonstrate how this is used, we will create a new Windows menu containing options for each of the main layout options. An illustration of each option is shown in the table.

.NET Table 16.3 MdiLayout enumeration

The MdiLayout enumeration specifies the possible layout options for a set of MDI child forms. This is used in the LayoutMdi method of the Form class to automatically display a set of forms with the given layout mode. This class is part of the System.Windows.Forms namespace.

The following table illustrates each layout style with a set of three child forms.

ArrangeIcons

The icons or minimized forms are arranged within the

 

client window. Note that this has no effect on child

 

forms that are not minimized.

Enumeration

Values

558

CHAPTER 16 MULTIPLE DOCUMENT INTERFACES

.NET Table 16.3 MdiLayout enumeration

Cascade

The child forms are displayed on top of each other in

 

step fashion so that only the title bar of the hidden forms

 

is visible.

TileHorizontal

The client area is divided horizontally into equal sections

 

and each open window is displayed in a section.

Enumeration

Values

TileVertical

The client area is divided vertically into equal sections

 

and each open window is displayed in a section.

MDI CHILD WINDOW MANAGEMENT

559

In your application, you can choose to support some or all of these options. The various layout styles are useful for quickly seeing the entire set of open windows in an MDI application, and typically appear in a Windows menu located on the MDI parent form. Since our application is nothing if not typical, we will do exactly this. The following table details the required steps.

Set the version number of the MyPhotos application to 16.5.

ADD LAYOUT MENUS TO THE PARENT FORM

 

 

 

 

 

Action

Result

 

 

 

 

 

 

 

 

 

 

1

In the ParentForm.cs [Design] window, add

 

 

a new top-level Windows menu to the

 

 

form.

 

 

 

 

 

 

 

 

 

 

 

 

 

Settings

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Property

 

 

Value

 

 

 

 

(Name)

 

menuWindows

 

 

 

 

MergeOrder

 

3

 

 

 

 

 

 

 

Text

 

 

&Window

 

 

 

 

 

 

 

 

 

 

 

 

 

2

Add a menu item for each of the layout

 

 

styles.

 

 

 

 

 

 

 

 

 

 

 

 

 

Settings

 

 

 

 

 

 

 

 

 

 

 

 

Menu

 

Property

 

Value

 

 

 

Arrange

 

(Name)

 

menuArrange

 

 

 

 

 

 

Text

 

&Arrange Icons

 

 

 

Cascade

 

(Name)

 

menuCascade

 

 

 

 

 

 

Text

 

&Cascade

 

 

 

Horizontal

 

(Name)

 

menuTileHorizontal

 

 

 

 

 

 

Text

 

Tile &Horizontal

 

 

 

Vertical

 

(Name)

 

menuTileVertical

 

 

 

 

 

 

Text

 

Tile &Vertical

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

560

CHAPTER 16 MULTIPLE DOCUMENT INTERFACES

ADD LAYOUT MENUS TO THE PARENT FORM (continued)

 

Action

Result

 

 

 

3

Add a Click event handler for each menu

private void menuArrange_Click

 

that calls the LayoutMdi method with the

(object sender, System.EventArgs e)

 

corresponding MdiLayout enumeration

{

 

LayoutMdi(MdiLayout.ArrangeIcons);

 

value.

 

}

 

 

private void menuCascade_Click

 

 

(object sender, System.EventArgs e)

 

 

{

 

 

LayoutMdi(MdiLayout.Cascade);

 

 

}

 

 

private void menuTileHorizontal_Click

 

 

(object sender, System.EventArgs e)

 

 

{

 

 

LayoutMdi(MdiLayout.TileHorizontal);

 

 

}

 

 

private void menuTileVertical_Click

 

 

(object sender, System.EventArgs e)

 

 

{

 

 

LayoutMdi(MdiLayout.TileVertical);

 

 

}

 

 

 

This change permits the user to automatically arrange the open windows in the selected style. Compile and run the application, open a few windows, and verify that these changes work as advertised.

The other topic related to our Windows menu is that of the MdiList property.

16.5.2CREATING AN MDI CHILD LIST

It is common in MDI applications to provide a list of open windows as part of the Window menu. This permits the user to quickly jump to an open window at the click of the mouse. The .NET folks at Microsoft were kind enough to provide a quick way to do this through the MdiList property of the MenuItem class.

Figure 16.10

In the list of child forms, note how the active child form is automatically checked by the framework.

MDI CHILD WINDOW MANAGEMENT

561

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