Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(ebook) Visual Studio .NET Mastering Visual Basic.pdf
Скачиваний:
136
Добавлен:
17.08.2013
Размер:
15.38 Mб
Скачать

834 Chapter 18 RECURSIVE PROGRAMMING

To start the scanning of the TreeView1 control, start at the top node of the control with the statement

ScanNode(GlobeTree.Nodes(0))

This statement must appear in a button’s Click event handler. It calls the ScanNode() subroutine to scan the child nodes of a specific node, which is passed to the subroutine as argument. GlobeTree.Nodes(0) is the root node. By passing the root node to the ScanNode() subroutine, we’re in effect asking it to scan the entire tree. The name of the TreeView control is GlobeTree, the same one we used in the examples of Chapter 16.

Let’s look now at the ScanNode() subroutine:

Sub ScanNode(ByVal node As TreeNode) Dim thisNode As TreeNode

Static indentLevel As Integer Application.DoEvents() ListBox1.Items.Add(Space(indentLevel) & node.Text) If node.Nodes.Count > 0 Then

indentLevel += 5

For Each thisNode In node.Nodes ScanNode(thisNode)

Next indentLevel -= 5

End If End Sub

The ScanNode() subroutine adds the caption of the current node to the ListBox1 control. Then it examines the values of the Node.Nodes.Count property, which returns the number of nodes under the current node. If this value is positive, the subroutine proceeds by scanning all the items of the Node.Nodes collection. It does that by calling itself and passing the current node as argument.

The ScanNode() subroutine can scan any TreeView control. All you need is a reference to the root node (or the node you want to scan recursively), which you must pass to the ScanNode() subroutine as argument. The subroutine will scan the entire subtree and display its nodes on a ListBox control.

The variable indentLevel keeps track of the level of nesting and is used to specify the indentation of the current node. It’s increased by 5 when we start scanning a new subordinate node and decreased by the same amount when we return to the next level up—similar to the PrintSubMenu() subroutine. The indentLevel variable is declared as static, because it must maintain its value between calls. If you want to display the nodes on a different control, such as a RichTextBox control, or save them to a text file, modify the statement that adds items to the ListBox1 control.

Summary

In this chapter, you learned about a powerful coding technique, recursion. Recursive procedures aren’t among the most popular topics in programming, but as you saw, they help you write code that’s impossible without recursion. First, you have to establish the recursive nature of the process. Once

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

SUMMARY 835

you do, you can write a procedure that performs the basic calculations and then calls itself with a different argument each time.

You must also make sure that the recursive procedure will eventually come to an end. You must examine some condition and explicitly insert an Exit Sub or Exit Function statement. If not, the procedure will keep calling itself until it causes a stack overflow.

Recursion is a very practical coding technique. I’ve used recursive techniques throughout the book, not because I wanted to show you a more elaborate, or a more elegant, way of doing things. None of the recursive procedures presented in this book can be implemented nonrecursively (except the introductory example of this chapter, of course).

To the computer, a recursive procedure is no different than any other procedure. Your program doesn’t know, and doesn’t care, whether a procedure calls itself or another one. It just loads and executes another copy of the specified procedure. If it’s the same one it’s currently executing, it uses the copy of the code in memory and creates a new set of local variables. In other words, it creates a new instance of the newly called procedure in memory and executes it.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

Chapter 19

The Multiple

Document Interface

The MULTIPLE DOCUMENT INTERFACE (MDI) was designed as an alternative interface for applications that manipulate documents of the same type. It simplifies the exchange of information among documents, all under the same roof. With an MDI application, you can maintain multiple open windows but not multiple copies of the application. Data exchange is easier when you can view and compare many documents simultaneously.

You almost certainly use Windows applications that can open multiple documents at the same time and allow the user to switch among them with a mouse-click. Microsoft Word is a typical example, although most people use it in single-document mode. Each document is displayed in its own window, and all document windows have the same behavior. The main form, or MDI form, is not duplicated, but it acts as a container for all other windows, and it’s called the parent window. The windows in which the individual documents are displayed are called child windows (or document windows). When you reposition the parent window on the Desktop, its child windows follow. Child windows, however, exist independently of the parent window. You can open and close child windows as you wish, and child windows can even have different functions. For example, you can open a few text windows and a few graphics windows next to one another, although this is rare.

Figure 19.1 shows Excel 2000 in MDI mode. The application’s main window contains five documents, three of them in custom-size windows and two of them minimized. The menus and the toolbars of the parent window apply to all the child windows. In reality, the menu bar of the MDI form contains the menu of the active child form. Depending on the state of the active child window, the MDI form’s menu may also change.

Paint Shop Pro is a very popular application (see Figure 19.2) that uses an MDI interface. Many mail applications display each message in a separate window and allow the user to open multiple messages. Most of the popular text editors (Notepad excluded) are MDI applications, too.

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com

838 Chapter 19 THE MULTIPLE DOCUMENT INTERFACE

Figure 19.1

Using Excel in

MDI mode

Figure 19.2

Paint Shop Pro, one of the most popular graphics applications, uses the MDI user interface.

MDI applications aren’t very common; not too many applications lend themselves to MDI implementation. Most of them are easier to implement with multiple forms, but some applications should be implemented with an MDI interface. These are the applications that can open multiple documents

Copyright ©2002 SYBEX, Inc., Alameda, CA

www.sybex.com