  
Chapter 11
Additional Controls
Now that you've added several programming statements to your Visual Basic language
repertoire, you can learn about additional controls to add new features to your applications
and to take advantage of some of the more powerful commands you now know. As you
learn about new controls, your programming ability grows by leaps and bounds because
your programs become richer in functionality and user interaction.
You'll learn about the selection controls, how to program scrollbars, and how
to set the Timer control to let your application know when a predetermined amount
of time has passed.
The highlights of this hour include
- How option buttons differ from check boxes
- When to change the check box's style
- Why scrollbars contain unusual properties
- How to set the Timer control to record time passing as an application executes
Option Buttons
Figure 11.1 shows an application with four option buttons. An option button gives
your user a choice. By clicking the option button or by sending the focus to the
option button and pressing the Spacebar to choose the option, the user selects or
deselects an option button. The option button has a black center inside its option
button circle when selected.
Figure
11.1. A form with four option buttons.
Option buttons act in a mutually exclusive fashion. Only one option button can
be selected at any one time. Therefore, in Figure 11.1, the user could not select
two or more of the options. If the user were to click Texas, the California option
would no longer be selected. You don't have to do anything special to ensure that
only one option button is selected at any one time; Visual Basic takes care of removing
the former option's selection when the user selects a subsequent option button.
NOTE: Option buttons
are sometimes called radio buttons. Many car radios used to have five or six buttons
that selected preset stations. The listener could only select one station; as soon
as the listener pushed a button, the previous station's button popped out.
The option button supports several of the properties you're already familiar with,
such as the Appearance and Alignment properties. The Alignment
property determines whether the option button text resides to the left or right of
the option button. Figure 11.2 shows the option buttons with their Alignment
property set to 2-Right Justify. The alignment you set depends on where
the option buttons are to fall in relation to other controls.
Figure
11.2. These option buttons have a right-justified
Alignment property.
TIP: An option button
control array makes setting option button properties, such as the Alignment
property, simple. Several option buttons almost always appear together and the control
array lets you set only one's property and the others will receive the same property
settings. If you do not create an option button control array, you can change all
the option button properties at once, even without a control array, by first selecting
all the option button controls and then setting the properties for all of them at
once.
The Value property is perhaps the most important option button property
because the Value property changes at runtime and determines whether the
option button is currently selected. By the way, the user can select only one option
button at a time, but the application may start up without any option buttons being
set if you don't set any in the Properties window or in code.
Frames and Option
Buttons
Figure 11.3 shows an application called Controls that comes in the VB Samples
folder. (Load the Controls.VBP project and run the application to select
the Option Buttons command button and display Figure 11.3's window.) This option
button application lets you select a computer type and operating system. Figure 11.3
seems to violate the option button's primary rule: More than one option button is
selected at the same time (the Pentium option button and the Windows 95 option).
Sometimes a form will need several sets of option buttons, just like the form
in Figure 11.3. In each set the user should be allowed to select only one option
button, but one option button should be set from each set at the same time. Therefore,
you must revise the previous rule, which states that only one option button can be
set at one time. The truth is that only one option button inside a frame can be set
at one time.
Figure
11.3. Two option buttons are set.
New Term: A frame is a rectangular
region on a form that holds other controls and groups the controls into a single
set.
A frame is a control that holds other controls. The frame is a rectangular outline
with an optional title. When you want to place multiple sets of option buttons on
a form, first place the frame or frames onto the form. (You can place any control
on a frame, but the frame especially helps group option buttons so you can offer
multiple option button sets.)
NOTE: The form acts
as a default frame. Therefore, two sets of option buttons reside on Figure 11.3's
form: One set resides in a frame and the other set resides on the form itself so
you consider them framed as well, even though no specific frame control surrounds
them.
The frame control does support properties that determine the frame's look and
caption and a frame does support a few events, but most programmers use the frame
as a holding place to group other controls. Once you place controls in a frame, you
can move the frame and all the frame's controls move with it. Therefore, adjusting
framed controls is relatively easy to do.
WARNING: Always
place a frame on the form before putting controls in the frame. If you simply move
controls from elsewhere on the form to the frame, the controls will not be in the
frame but will exist simply on top of the frame. Visual Basic will not consider them
framed together. To add additional controls to a frame with controls, click one of
the framed controls before adding the new control.
Figure 11.4 shows an application that contains three frames that determine how
text appears inside a label. The user can select only one option button inside each
frame. As soon as the user changes one of the options, the option button's Click()
event responds to the change and sets the Label property accordingly. Listing
11.1 contains the complete form module code that takes care of the user's action.
The label is initialized in the Form_Load() event procedure (the procedure
that executes right before the user sees the form) and the remaining event procedures
are the responses to various user clicks on the form's controls. The controls are
named well enough so that you will know where the controls appear in Figure 11.4.
Figure
11.4. A form with three frames.
Listing 11.1. The
framed option button code.
Private Sub Form_Load()
` Initialize the label's text
Dim strLabel1 As String
Dim strLabel2 As String
Dim strLabel3 As String
Dim strLabel4 As String
strLabel1 = "Use frames if you want "
strLabel2 = "to group options together. "
strLabel3 = "Each frame forms one set "
strLabel4 = "of option buttons."
lblFrames.Caption = strLabel1 & strLabel2 & _
strLabel3 & strLabel4
` Set the label's properties
lblFrames.FontItalic = True
optItalicTrue.Value = True
lblFrames.FontUnderline = True
optUnderTrue.Value = True
lblFrames.ForeColor = vbBlue
optBlue.Value = True
End Sub
Private Sub optItalicTrue_Click()
lblFrames.FontUnderline = True
End Sub
Private Sub optItalicFalse_Click()
lblFrames.FontUnderline = False
End Sub
Private Sub optRed_Click()
lblFrames.ForeColor = vbRed
End Sub
Private Sub optBlue_Click()
lblFrames.ForeColor = vbBlue
End Sub
Private Sub optGreen_Click()
lblFrames.ForeColor = vbGreen
End Sub
Private Sub optUnderTrue_Click()
lblFrames.FontItalic = True
End Sub
Private Sub optUnderFalse_Click()
lblFrames.FontItalic = False
End Sub
Private Sub cmdExit_Click()
Unload Me
End
End Sub
Color Named Literals
Listing 11.1 demonstrates the use of named literals. The background colors assigned
to the label are named literals that come with Visual Basic. Table 11.1 lists the
named literal colors that you can use and assign to any property that uses color
values such as the background and foreground colors of several controls. Given that
Windows supports millions of possible colors, the eight colors that Table 11.1 lists
represent a small number of colors you can possibly set. (Named literals do not exist
for other color values.) Visual Basic supplies several ways to specify colors so
that you can set a color from among the millions possible. For most situations, however,
and for simplicity, Table 11.1's named literals work for most applications.
Table 11.1. The color named literals.
| Literal |
Color |
| vbBlack |
Black |
| vbRed |
Red |
| vbGreen |
Green |
| vbYellow |
Yellow |
| vbBlue |
Blue |
| vbMagenta |
Magenta |
| vbCyan |
Cyan |
| vbWhite |
White |
Check Boxes
Figure 11.5 shows a form with check boxes. The Check Box control works just like
the option button, with two differences: A selected check box shows the selection
with a checkmark, and check boxes are never mutually exclusive. Therefore, the user
can select one or more check boxes even if those check boxes reside in the same frame
or on the same form.
Figure
11.5. A form with two check boxes.
NOTE: Figure 11.5's
application is from the Controls.VBP project included in VB's Samples
folder.
The Check Box control supports the same fundamental properties as the option button
except that the Value property determines not only if the box is checked
(if 1) or unchecked (if 0), but a check box can also be grayed
(if the Value property contains 2). Users sometimes use a grayed
check box to determine whether part of a selected option is true. In addition, the
programmer may gray out a box to show that the selection is unavailable under the
current conditions.
Visual Basic version 5 added a new Style value to the Check Box control's
property list. The available Style property values are 0-Standard
and 1-Graphical. The graphical style value makes the check box look a lot
like a command button that stays pressed (when selected) or unpressed (when not selected).
Figure 11.6 shows a form that illustrates the various check box property options
available to you.
Figure
11.6. Some Check Box control property
options.
Scrollbars
Scrollbars let users control value changes. Rather than type specific values,
the user can move the scrollbars with the mouse to specify relative positions within
a range of values. The toolbox includes both a Horizontal Scrollbar and a Vertical
Scrollbar control.
Table 11.2 contains a list of important scrollbar properties that determine the
behavior of the scrollbar.
Table 11.2. Fundamental scrollbar properties.
| Property |
Description |
| LargeChange |
Specifies the amount that the scrollbar changes when the user clicks within the scrollbar's
shaft area. |
| Max |
Indicates the maximum number of units that the scrollbar value represents at its
highest setting. The range is from 1 to 32767 (the default Max
value). |
| Min |
Indicates the minimum number of units the scrollbar value represents at its lowest
setting. The range is from 1 (the default Min value) to 32767. |
| SmallChange |
Specifies the amount that the scrollbar changes when the user clicks an arrow at
either end of the scrollbar. |
| Value |
Contains the unit of measurement currently represented by the position of the scrollbar. |
When you place a scrollbar on a form, you must decide at that time what range
of values the scrollbar is to represent. The scrollbar's full range can extend from
1 to 32767. Set the Min property to the lowest value you
want represented by the scrollbar. Set the Max property to the highest value
you want represented by the scrollbar.
When the user eventually uses the scrollbar, the scrollbar arrows control small
movements in the scrollbar's value determined by the SmallChange property.
Clicking the empty part of the shaft on either side of the scrollbox produces a positive
or negative change in the value represented by the LargeChange property.
The user can drag the scrollbox itself to any position within the scrollbar shaft
to jump to a specific location instead of changing the value gradually.
Suppose, for example, that a horizontal scrollbar represented a range of whole
dollar amounts from $5 to $100. When the user clicks the scroll arrows, the scrollbar's
value changes by $1. When the user clicks the empty shaft on either side of the scrollbox,
the scrollbar's value changes by $5. Here are the property values that you would
set that determine how VB interprets each click of the scrollbar: Min: 5,
Max: 100, SmallChange: 1, and LargeChange:
5.
The physical size of the scrollbar has no bearing on the scrollbar's returned
values when the user selects from the scrollbar. Adjust the scrollbars on your form
so that the scrollbars are wide enough or tall enough to be appropriately sized for
the items that they represent.
New Term: A thumb is the scrollbar's
moving scrollbox (the elevator-like box).
Figure 11.7 shows an application that uses a vertical scrollbar to change the
size of a label's font size. As the user clicks the top scrollbar arrow, the font
size shrinks by the SmallChange value. As the user clicks the bottom scrollbar
arrow, the font size increases by the SmallChange value. (The application's
SmallChange property value is 1.) If the user clicks in the scrollbar's
shaft on either side of the scrollbar's thumb, the LargeChange property
value of 5 is either added to or subtracted from the font size.
Figure
11.7. The vertical scrollbar determines
the label's font size.
Listing 11.2 shows the code behind Figure 11.7. The code is not lengthy because the
scrollbar's Click() event procedure must change only the label's text font
size and the label that displays the current font size. Any time the user changes
the scrollbar, the scrollbar's Click() event procedure executes.
Listing 11.2. The code behind the
scrollbar application.
Private Sub vsbHeight_Change()
lblScroll.FontSize = vsbHeight.Value
lblFontHeight.Caption = vsbHeight.Value
End Sub
VBs Clock: The Timer Control
The Timer control acts unlike any other control you've seen so far. The Timer
control always works in the background and the user never sees the timer on the form.
You will see the Timer control during design time because you need to be able to
select the control and change its properties. Nevertheless, the timer's purpose is
to work in the background, triggering an event every once in a while according to
the clock ticks.
Your computer has an internal clock to keep things running smoothly. The hardware
requires an accurate clock for memory refreshes and CPU cycle coordination efforts.
Software, such as Visual Basic, can tap into the internal clock and utilize its timing
to control certain time-based events that your application may need to perform.
Figure 11.8 shows the Timer control as it appears when you place the control on
a form. The Timer control supports only seven properties because the Timer control
never appears on the form at runtime. Therefore, the control has no need for many
of the style and size properties used for other controls the user sees.
Figure
11.8. The Timer control appears on the
form only at design time.
You can place the timer out of the way of your form's other controls since its
physical location is trivial. Once you place the timer on the form, you should set
its Interval property because Interval is the most important timer
property. The Interval property contains a value that must range from 1
to 65535. The value is in milliseconds (or thousandths of a second), so
an Interval value of 500 would equate to half a second. The Timer
control generates only one event: the Timer event. The Timer control triggers
a Timer event after each interval of time goes by. Therefore, if you named
a Timer control tmrClock, and if you set the control's Interval
property to 1000, Visual Basic would execute the tmrClock_Timer()
event procedure approximately every second.
New Term: A millisecond is one-thousandth
of a second.
WARNING: The Timer
control is not a perfect timer, just a good timer. Other processes occurring inside
your computer can cause the Timer control to be off by a few milliseconds. The smaller
the Interval value, the more likely the Timer event will be off.
Fortunately, the Timer control works without much of a timing hitch, especially given
today's faster computers.
Figure 11.9 shows the Alarm sample application that comes with Visual Basic in
the Samples\PGuide folder. The Timer's Interval property value
is set to 500 and the time of day updates every half-second (the time is
shown in full seconds; the half-second update helps correct timing problems that
might occur every few half-seconds). Therefore, if you run the Alarm application,
a Timer event will occur every one-half second.
Figure
11.9. The Timer control generates an event
every few milliseconds.
Clicking on the Alarm application's small Form window produces an input box that
asks you for an alarm time. The Timer() click procedure from then on compares
the current time with the time that the user enters and, if the alarm time has been
reached, the alarm goes off. The alarm displays Figure 11.10's dialog box, which
informs the user that the alarm time is reached.
Figure
11.10. The Timer() event procedure
determined that the alarm time was reached.
WARNING: Feel free
to study the sample Alarm application's code, but be warned that the application
uses a few built-in functions that you will not master until Hour 14, "Built-in
Functions Save Time."
If you need an interval that's larger than the 65535 Interval
value allows (this maximum Interval value provides only about a 10-second
interval), insert some If logic at the top of the Timer() event
procedure that checks to see if the required amount of time has passed since the
last interval. (To do this, you will need some of the time functions described in
Hour 14.)
Summary
In this hour you have learned about several new controls so you can begin adding
more user interactivity to your applications. The option buttons and check boxes
work almost exactly alike except that the option buttons are mutually exclusive and
provide your users with single options from a selection. The scrollbars let your
users select values based on a range using either a horizontal or vertical scrollbar.
Finally, the Timer control keeps track of time passing during your application's
execution and triggers a Timer event every time the Interval value
of time has passed.
Chapter 12, "Dialog Box Basics," builds further on your I/O skills by demonstrating
how to create common dialog boxes. Your users will be able to use the dialog boxes
to enter and select multiple values.
Q&A
- Q Can I program check boxes to be mutually exclusive or do I have to use option
buttons?
A Check boxes are not mutually exclusive by design. Option buttons are. Therefore,
a Visual Basic application's user can only select one option button at a time within
any one frame or on the form. If you want to change the behavior of check boxes and
make them act like option buttons, be warned that you are giving your users mixed
signals. Your users are used to being able to select as many check boxes as they
wish and your application can keep them from doing the usual, which, in many cases,
makes the user dislike your application. Users feel comfortable when an application
follows de facto standards. Nevertheless, you can make the check boxes act like option
buttons, but you will have to put code in the check boxes' Click() event
procedures to remove the check from the current check box when the user clicks another
check box. The code is fairly trivial, but again, your users will adapt more easily
to your application if you use option buttons in mutually exclusive cases.
Q How can I trust the Timer control if it is not accurate?
A The Timer control is accurate, but your computer cannot always let Windows
respond to events exactly when needed. A multitasking operating system such as Windows
does a lot of things at once. If a Timer() event occurs, the operating system
cannot always, at that exact millisecond, go back to the running application and
signal that the event occurred. Therefore, your applications sometimes take a back
seat to system operations. Today's fast computers have much less of a time-accuracy
problem than in the past, so you should not worry too much about the potential millisecond
miss now and then.
Workshop
The quiz questions and exercises are provided for your further understanding.
See Appendix C, "Answers," for answers.
Quiz
- 1. True or false: Option button captions always appear to the right of
the buttons.
2. What happens if the user clicks an option button that is not currently selected?
3. Why would you gray out a Check Box control?
4. What happens if the user clicks a check box that is not currently selected?
5. True or false: An application can begin with none of its option buttons or
check boxes selected.
6. What kind of control can you place on a frame?
7. What is the difference between a scrollbar's Small Change property
and a scrollbar's Large Change property?
8. Which property changes when the user clicks one of the scrollbar's arrows?
9. True or false: The Timer control works like an alarm clock ready to go off
at a preset time of day.
10. True or false: If you need a timer interval greater than approximately 10
seconds, you must use multiple Timer controls.
Exercises
- 1. Create an application that mimics the frame application used with Listing
11.1. Instead of using separate option buttons, use an option button array for each
frame's option button, making a total of three option button arrays. Change Listing
11.1 to reduce the number of event procedures in the application. Use a Select
Case statement based on the event procedure Index argument to set the
appropriate label property.
2. Change the application you wrote in exercise 1 so that no frames appear on
the form. Remove the Underline and Italic option buttons (keep the Framed Color option
buttons) and add these check box controls in their place: Underline and Italic. Change
the code so that the text will appear underlined if the user clicks the Underline
check box and so that the text will be italicized if the user clicks the Italic check
box. Both or only one might be checked at any one time.
3. Duplicate this lesson's scrollbar application that lets the user set the label's
text size with the scrollbar. Completely remove the scrollbar, however, and add a
Timer property. Every second, add 5 to the label's font size. When the font
size grows to 70 or more points, send the size back down to 8 and start increasing
the size once again.
 
|