Knowledge Base
Knowledge Base
Title: Control Overlaid by Another Control Fails to Refresh if Moved
Document Number: Q74519 Publ Date: 29-JUL-1991
Product Name: Microsoft Visual Basic
Product Version: 1.00
Operating System: WINDOWS
Summary:
Visual Basic does not support overlapping controls. Having overlapping
controls can result in portions of a control not refreshing correctly.
If controls are moved over each other, then one or both of the
controls may not correctly refresh even when the controls are moved
apart. This is known to happen when controls are resized at run time
using the Move method or by changing the Height and Width properties
as a result of a Form_Resize event. Because controls must be resized
one at a time, it is possible that one control will briefly overlap
another control during the resize process at run time. The control
that was briefly overlapped may not refresh properly. An example of
this behavior is given further below.
This behavior can be improved by performing the Refresh method
(CtrlName.Refresh) on every overlapping control at run time, after an
overlapped control has been moved or after a form that contains
overlapping controls has been resized.
This is not a problem with Visual Basic, but the nature of overlapping
controls under Visual Basic. This behavior occurs at run time in the
Visual Basic development environment or as an .EXE program.
This information applies to the Visual Basic programming system
version 1.0 for Windows.
More Information:
For more information about Visual Basic and overlapping controls,
query in this knowledge base on the following words:
overlapping and controls and Visual and Basic
Steps to Reproduce Problem
--------------------------
1. From the File menu, choose New Project (ALT, F, P).
2. Add a picture control (Picture1) to the default form (Form1).
3. Add a command button (Command1) to Form1.
4. Add a vertical scroll bar (VScroll1) to Form1.
5. Using the mouse, double-click on Form1 to bring up the code
window.
6. Within the Resize event procedure of Form1, add the following code:
Sub Form_Resize ()
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - Command1.Height
VScroll1.Move ScaleWidth - VScroll1.Width, 0, _
VScroll1.Width, ScaleHeight - Command1.Height
Command1.Move 0, ScaleHeight - Command1.Height, _
ScaleWidth, Command1.Height
End Sub
Note: The underscores (_) in the above code example indicate that
the line should be concatenated with the next line in the Visual Basic
environment (VB.EXE).
7. Run the program.
8. Using the mouse, resize the form by extending the bottom or right
sides. When the bottom edge of the form is extended, the command
button (Command1) will not refresh. When the right edge of Form1
is extended, the scroll bar will not refresh. The refresh problems
are caused because Picture1 is expanded and temporarily overlaps
the control. When the control (VScroll1 or Command1) is moved out
of the way, it is not refreshed.
To work around this behavior, use the Refresh method for Picture1,
VScroll1, and Command1 after the controls have be moved. Add the
following statements to Sub Form_Resize (after the Command1.Move
statement) above to overcome the behavior:
Picture1.Refresh
VScroll1.Refresh
Command1.Refresh
Additional reference words: 1.00
COPYRIGHT Microsoft Corporation, 1991.
Title: Control Overlaid by Another Control Fails to Refresh if Moved
Document Number: Q74519 Publ Date: 29-JUL-1991
Product Name: Microsoft Visual Basic
Product Version: 1.00
Operating System: WINDOWS
Summary:
Visual Basic does not support overlapping controls. Having overlapping
controls can result in portions of a control not refreshing correctly.
If controls are moved over each other, then one or both of the
controls may not correctly refresh even when the controls are moved
apart. This is known to happen when controls are resized at run time
using the Move method or by changing the Height and Width properties
as a result of a Form_Resize event. Because controls must be resized
one at a time, it is possible that one control will briefly overlap
another control during the resize process at run time. The control
that was briefly overlapped may not refresh properly. An example of
this behavior is given further below.
This behavior can be improved by performing the Refresh method
(CtrlName.Refresh) on every overlapping control at run time, after an
overlapped control has been moved or after a form that contains
overlapping controls has been resized.
This is not a problem with Visual Basic, but the nature of overlapping
controls under Visual Basic. This behavior occurs at run time in the
Visual Basic development environment or as an .EXE program.
This information applies to the Visual Basic programming system
version 1.0 for Windows.
More Information:
For more information about Visual Basic and overlapping controls,
query in this knowledge base on the following words:
overlapping and controls and Visual and Basic
Steps to Reproduce Problem
--------------------------
1. From the File menu, choose New Project (ALT, F, P).
2. Add a picture control (Picture1) to the default form (Form1).
3. Add a command button (Command1) to Form1.
4. Add a vertical scroll bar (VScroll1) to Form1.
5. Using the mouse, double-click on Form1 to bring up the code
window.
6. Within the Resize event procedure of Form1, add the following code:
Sub Form_Resize ()
Picture1.Move 0, 0, ScaleWidth - VScroll1.Width, _
ScaleHeight - Command1.Height
VScroll1.Move ScaleWidth - VScroll1.Width, 0, _
VScroll1.Width, ScaleHeight - Command1.Height
Command1.Move 0, ScaleHeight - Command1.Height, _
ScaleWidth, Command1.Height
End Sub
Note: The underscores (_) in the above code example indicate that
the line should be concatenated with the next line in the Visual Basic
environment (VB.EXE).
7. Run the program.
8. Using the mouse, resize the form by extending the bottom or right
sides. When the bottom edge of the form is extended, the command
button (Command1) will not refresh. When the right edge of Form1
is extended, the scroll bar will not refresh. The refresh problems
are caused because Picture1 is expanded and temporarily overlaps
the control. When the control (VScroll1 or Command1) is moved out
of the way, it is not refreshed.
To work around this behavior, use the Refresh method for Picture1,
VScroll1, and Command1 after the controls have be moved. Add the
following statements to Sub Form_Resize (after the Command1.Move
statement) above to overcome the behavior:
Picture1.Refresh
VScroll1.Refresh
Command1.Refresh
Additional reference words: 1.00
COPYRIGHT Microsoft Corporation, 1991.
Comments
Post a Comment