Microsoft KB Archive/71101

= Why Output Might Not Display from VB Form_Load Procedure =

Article ID: 71101

Article Last Modified on 12/12/2003

-

APPLIES TO


 * Microsoft Visual Basic 2.0 Standard Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 2.0 Professional Edition
 * Microsoft Visual Basic 3.0 Professional Edition
 * Microsoft Visual Basic 1.0 Standard Edition

-



This article was previously published under Q71101



SUMMARY
Any graphics or output done within a Form_Load procedure will not display on the form unless you first make the form visible with the Form1.Show method or if you set the form's AutoRedraw property to be true (non-zero).



MORE INFORMATION
When the Form_Load procedure executes (at the beginning of the program), by default the form is not yet displayed. Therefore, during the Form_Load event, no graphics are displayed to the nonexistent form unless you first Show the form (at run time) or set the form's AutoRedraw property (at design time or run time).

A better approach to drawing graphics to the form is to have the graphics drawn to the form during a Sub Form_Paint procedure. This allows the Form.AutoRedraw property to be set to FALSE, increasing the speed performance of your program. Visual Basic does not have to refresh the screen image of your form as it does when a form is overlapped with another window. You (as the programmer) are responsible for refreshing the form, and Sub Form_Paint is the most logical place to handle this situation.

Listed below are three examples of drawing graphics to your form. The first example shows how the graphics fail to be displayed to the form when drawn from within a Form_Load event procedure. The second example shows how you could draw a circle to the form, but the Form.AutoRedraw property must be set to TRUE for the circle to be retained in the event the form needs to be refreshed. The third example is the best approach; it is the fastest and most efficient of the three.

For each example below, add the following Function procedure as a code procedure to Form1. Function Minimum! (n1!, n2!) If n1! < n2! Then Minimum! = n1! Else Minimum! = n2! End If End Function

Example 1
No graphic is displayed to the form in the following: Sub Form_Load Row = Form1.ScaleHeight / 2 Col = Form1.ScaleWidth / 2 Radius = Minimum(Row, Col)  ' Function that returns smaller number. Form1.Circle (Col, Row), Radius End Sub

Example 2
This example will work, but the AutoRedraw property of Form1 must be TRUE for the screen to refresh properly: Sub Form_Load Form1.Show Form1.AutoRedraw = -1 Row = Form1.ScaleHeight / 2 Col = Form1.ScaleWidth / 2 Radius = Minimum(Row, Col)  ' Function that returns smaller number. Form1.Circle (Col, Row), Radius End Sub

Example 3
This is the best example. AutoRedraw should be set to FALSE for better speed and efficiency. Sub Form_Paint Row = Form1.ScaleHeight / 2 Col = Form1.ScaleWidth / 2 Radius = Minimum(Row, Col)  ' Function that returns smaller number. Form1.Circle (Col, Row), Radius End Sub

Additional query words: 2.00 3.00

Keywords: KB71101

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.