How to Use Advanced Windows Forms | 2

How to Use Advanced Windows Forms

18.1.3 Explorer interfaces

In an explorer interface a hierarchy or other organization is imposed on a concept or
set of concepts, with the hierarchy shown on one side and details related to a selected
item shown in the main portion of the window. The classic example of this style is the
Windows Explorer interface, which displays information about the data available on
the computer, be it from disk, CD, network, or another source.

Explorer interfaces give an overview of the concept in question, and typically provide
a tree control to allow the user to explorer the data at a high level or successive
levels of detail. The user can select a specific item, or node, in the tree and see information
about this item in the other portion of the interface, most commonly in the
form of a list showing the selected item's contents.

In this chapter we start building the MyAlbumExplorer interface as an example of
this style. The end result is shown in figure 18.3. The next section begins this discussion
with an exploration of splitter controls and an introduction to the TreeView and ListView controls.

18.2 EXPLORER INTERFACES IN .NET

Now that we've reviewed the three main interface styles for Windows applications,
let's take a look at the explorer interface in more detail. Part 1 of the book built a single
document interface, and we examine multiple document interfaces in chapter 20.
We discuss the explorer interface style in this as well as the next chapter. This
chapter focuses more on the interface itself, and the tree view and splitter controls
commonly used for this interface. Chapter 19 elaborates on this discussion and examines
the ListView control.

While building an explorer interface has always been possible in .NET, the release
of .NET 2.0 made this task much easier. In the .NET 1.x releases, a Splitter class
was provided that split a container into two distinct regions. The proper location of
the splitter object was dependent on the order in which controls were added to the
container, which could get rather confusing. This class is still available in .NET 2.0,
but Microsoft no longer recommends its use.

Recognizing the error of their ways, the Windows Forms team has added the
SplitContainer control. This class works much like the JSplitPane class in the
Java Swing interface, for you Java aficionados out there. We discuss split containers
in a moment.

Once a SplitContainer object is on a form, a TreeView control can be
dropped into the left-hand side and a ListView control into the right-hand side.
Explorer interfaces in Windows were never quite so easy.

We begin our discussion with the splitter controls.

18.2.1 The SplitContainer class

As already indicated, the SplitContainer class is the recommended mechanism
for splitting a container into multiple sections. The members of this class are shown
in .NET Table 18.1. As you can see, the SplitContainer class provides a number
of properties to control the appearance of the two resulting panels. The size of each
panel can be adjustable or fixed, depending on the FixedPanel and IsSplitter-
Fixed properties described in the table. Panel-specific properties define a minimum
size for each panel and allow either panel to be hidden from view.

The movable bar within a split container, called the splitter, is affected by properties
that define its location and size within the container. The SplitterIncrementproperty allows a splitter to move in increments larger than one pixel. Additional
tasks can be performed before or after a user moves
the splitter by handling the SplitterMoved and
SplitterMoving events.

Split containers can orient their panels in the
horizontal or vertical direction, and can be nested
to allow multiple display areas within a form. A
quick example of these two concepts appears in
listing 18.1, which creates the form shown in figure
18.4. This example displays a horizontal split
container nested within the right panel of a vertical
split container. Each panel assigns a different
BackColor setting so the location of each splitter
panel is immediately apparent.