Visual Basic lets you
build a complete and functional Windows application by dropping a bunch of
controls on a form and writing some code that executes when something happens
to those controls or to the form itself. For instance, you can write code that
executes when a form loads or unloads or when the user resizes it. Likewise,
you can write code that executes when the user clicks on a control or types
while the control has the input focus.
This programming
paradigm is also known as event-driven programming because
your application is made up of several event procedures executed in an order
that's dependent on what happens at run time. The order of execution can't, in
general, be foreseen when the program is under construction. This programming
model contrasts with the procedural approach, which was dominant in the old
days.
Adding Controls to a
Form
We're ready to get
practical. Launch the Visual Basic IDE, and select a Standard EXE project. You
should have a blank form near the center of the work area. More accurately, you
have a form designer, which you use to define the appearance
of the main window of your application. You can also create other forms, if you
need them, and you can create other objects as well, using different designers
(the UserControl and UserDocument designers, for example). Other chapters of
this book are devoted to such designers.
Setting Properties of
Controls
Each control is
characterized by a set of properties that define its behavior and appearance.
For instance, Label controls expose a Caption property that
corresponds to the character string displayed on the control itself, and a BorderStyle property
that affects the appearance of a border around the label. The TextBox control's
most important property is Text, which corresponds to the string of
characters that appears within the control itself and that can be edited by the
user.
In all cases, you can
modify one or more properties of a control by selecting the control in the form
designer and then pressing F4 to show the Properties window. You can scroll
through the contents of the Properties window until the property you're
interested in becomes visible. You can then select it and enter a new value.
Using this procedure,
you can modify the Caption property of all four Label controls
to &Width, &Height, &Perimeter,
and &Area, respectively. You will note that the ampersand
character doesn't appear on the control and that its effect is to underline the
character that follows it. This operation actually creates a hot key and
associates it with the control. When a control is associated with a hot key,
the user can quickly move the focus to the control by pressing an Alt+x key
combination, as you normally do within most Windows applications. Notice that
only controls exposing a Caption property can be associated
with a hot key. Such controls include the Label, Frame, CommandButton,
OptionButton, and CheckBox.
Notice that once you
have selected the Caption property for the first Label
control, it stays selected when you then click on other controls. You can take
advantage of this mechanism to change the Caption property of
the CommandButton control to &Evaluate and the Caption property
of the Form itself to Rectangle Demo, without having to select
the Caption item in the Properties window each time. Note that
ampersand characters within a form's caption don't have any special meaning.
As an exercise, let's
change the font attributes used for the controls, which you do through the Font property.
While you can perform this action on a control-by-control basis, it's much
easier to select the group of controls that you want to affect and then modify
their properties in a single operation. To select multiple controls, you can
click on each one of them while you press either the Shift or the Ctrl key, or
you can drag an imaginary rectangle around them. (This technique is also called lassoing the
controls.)
When you select a group
of controls and then press the F4 key, the Properties window displays only the
properties that are common to all the selected controls. The only properties
that are exposed by any control are Left, Top, Width,
and Height. If you select a group of controls that display a string
of characters, such as the TextBox, Label, and CommandButton controls in our
Rectangle example, the Font property is also available and can
therefore be selected. When you double-click on the Font item
in the Properties window, a Font dialog box appears. Let's select a Tahoma font
and set its size to 11 points.
Finally we must clear
the Text property of each of the four TextBox controls so that
the end user will find them empty when the program begins its execution. Oddly,
when you select two or more TextBox controls, the Text property
doesn't appear in the Properties window. Therefore, you must set the Text property
to an empty string for each individual TextBox control on the form. To be
honest, I don't know why this property is an exception to the rule stated
earlier. The result of all these operations is shown in Figure 1-9.
Figure 1-9. The Rectangle Demo form at design time, after setting the
controls' properties.
Naming Controls
One property that every
control has and that's very important to Visual Basic programmers is the Name property.
This is the string of characters that identifies the control in code. This
property can't be an empty string, and you can't have two or more controls on a
form with the same name. The special nature of this property is indirectly
confirmed by the fact that it appears as (Name) in the Properties window, where
the initial parenthesis serves to move it to the beginning of the property
list.
When you create a
control, Visual Basic assigns it a default name. For example, the first TextBox
control that you place on the form is named Text1, the second one
is named Text2, and so forth. Similarly, the first Label control is
named Label1, and the first CommandButton control is named Command1.
This default naming scheme frees you from having to invent a new, unique name
each time you create a control. Notice that the Caption property
of Label and CommandButton controls, as well as the Text property
of TextBox controls, initially reflect the control's Name property,
but the two properties are independent of each other. In fact, you have just
modified the Caption and Text properties of
the controls in the Rectangle Demo form without affecting their Name properties.
Because the Name property
identifies the control in code, it's a good habit to modify it so that it
conveys the meaning of the control itself. This is as important as selecting
meaningful names for your variables. In a sense, most controls on a form are
special variables whose contents are entered directly by the user.
Microsoft suggests that
you always use the same three-letter prefix for all the controls of a given
class. The control classes and their recommended prefixes are shown in Table
1-1.
Control Class
|
Prefix
|
Control Class
|
Prefix
|
CommandButton
|
cmd
|
Data
|
dat
|
TextBox
|
txt
|
HScrollBar
|
hsb
|
Label
|
lbl
|
VScrollBar
|
vsb
|
PictureBox
|
pic
|
DriveListBox
|
drv
|
OptionButton
|
opt
|
DirListBox
|
dir
|
CheckBox
|
chk
|
FileListBox
|
fil
|
ComboBox
|
cbo
|
Line
|
lin
|
ListBox
|
lst
|
Shape
|
shp
|
Timer
|
tmr
|
OLE
|
ole
|
Frame
|
fra
|
Form
|
frm
|
For instance, you should prefix the name of a
TextBox control with txt, the name of a Label control with lbl, and the name of
a CommandButton control with cmd. Forms should also follow this convention, and
the name of a form should be prefixed with the frm string.
This convention makes a lot of sense because it lets you deduce both the
control's type and meaning from its name. This book sticks to this naming
convention, especially for more complex examples when code readability is at
stake.
In our example, we will rename the Text1 through
Text4 controls as txtWidth, txtHeight, txtPerimeter, and txtArea respectively.
The Command1 control will be renamed cmdEvaluate, and the four Label1 through
Label4 controls will be renamed lblWidth, lblHeight, lblPerimeter, and lblArea,
respectively. However, please note that Label controls are seldom referred to
in code, so in most cases you can leave their names unmodified without
affecting the code's readability.
Adding Code
Up to this point, you have created and refined
the user interface of your program and created an application that in principle
can be run. (Press F5 and run it to convince yourself that it indeed works.)
But you don't have a useful application yet. To turn your pretty but useless
program into your first working application, you need to add some code. More
precisely, you have to add some code in the Click event of the
cmdEvaluate control. This event fires when the user clicks on the Evaluate button
or presses its associated hot key (the Alt+E key combination, in this case).
To write code within the Click event,
you just select the cmdEvaluate control and then press the F7 key, or
right-click on it and then invoke the View Code command from the pop-up menu.
Or you simply double-click on the control using the left mouse button. In all
cases, the code editor window appears, with the flashing cursor located between
the following two lines of code:
Private
Sub cmdEvaluate_Click()
End
Sub
|
Visual Basic has prepared the template of the Click event
procedure for you, and you have to add one or more lines of code between the Sub and End
Sub statements. In this simple program, you need to extract the values
stored in the txtWidth and txtHeight controls, use them to compute the
rectangle's perimeter and area, and assign the results to the txtPerimeter and
txtArea controls respectively:
Private
Sub cmdEvaluate_Click()
'Declare two floating point variables.
Dim reWidth As Double, reHeight As Double
'Extract values from input TextBox
controls.
reWidth = CDbl(txtWidth.Text)
reHeight = CDbl(txtHeight.Text)
'Evaluate results and assign to output
text boxes.
txtPerimeter.Text = CStr((reWidth +
reHeight) * 2)
txtArea.Text = CStr(reWidth * reHeight)
End
Sub
|
Note that you should always use the Dim statement
to declare the variables you are going to use so that you can specify for them
the most suitable data type. If you don't do that, Visual Basic will default
them to the Variant data type. While this would be OK for this sample program,
for most occasions you can make better and faster applications if you use
variables of a more specific type. Moreover, you should add an Option
Explicit statement at the very beginning of the code module so that
Visual Basic will automatically trap any attempt to use a variable that isn't
declared anywhere in the program code. By this single action, you'll avoid a
lot of problems later in the development phase.
Running and Debugging the
Program
You're finally ready to run this sample program.
You can start its execution in several ways: By invoking the Start command from
the Run menu, by clicking the corresponding icon on the toolbar, or by pressing
the F5 key. In all cases, you'll see the form designer disappear and be
replaced (but not necessarily in the same position on the screen) by the real
form. You can enter any value in the leftmost TextBox controls and then click
on the Evaluate button (or press the Alt+E key combination) to see the
calculated perimeter and area in the rightmost controls. When you're finished,
end the program by closing its main (and only) form.

No comments:
Post a Comment