PRB: MDI Child Form Painted Twice When Moved Before Loaded (109801)



The information in this article applies to:

  • Microsoft Visual Basic Professional Edition for Windows 3.0

This article was previously published under Q109801

SYMPTOMS

If you Load an MDI child form and then change the position or size of the MDI child form, it gets painted twice -- once in a default starting position and then in its final position.

CAUSE

When you access any properties of a form that is not currently loaded, the form is loaded immediately. Note that the Move method simply sets the Left, Top, Width, and Height form properties. Since MDI child forms cannot have their Visible property False, they cannot be loaded without being Visible. Therefore, when you try to set the position or size properties of an MDI child form before showing it, the MDI child form appears in a default position before your new settings take effect.

RESOLUTION

Initialize the position of MDI child forms from within their own Form_Load event handler. The Form_Load event handler is executed before the form actually becomes visible.

MORE INFORMATION

Steps to Reproduce Behavior

  1. Start a new project. Form1 is created by default.
  2. Set the Form1.MDIChild property to True.
  3. From the File menu, choose New MDI Form.
  4. From the Options menu, choose Project, and set the Start Up Form to MDIForm1.
  5. Add the following code to the MDIForm1 Load event procedure:
       Sub MDIForm_Load ()
          Form1.Move 0, 0, MDIForm1.ScaleWidth, MDIForm1.ScaleHeight
       End Sub
    						
  6. Run the program. Form1 appears briefly in the upper-left region of MDIForm1, then resizes to fill MDIForm1.
  7. To fix this problem, remove the code from the MDIForm1 Load event and place the following code in the MDIForm1 and Form1 event procedures:
       ' MDIForm1:
       Sub MDIForm_Load ()
          Form1.Show
       End Sub
    
       ' Form1:
       Sub Form_Load ()
          Form1.Move 0, 0, MDIForm1.ScaleWidth, MDIForm1.ScaleHeight
       End Sub
    						
  8. Run the program. Now Form1 appears once, in its final position and size.

Modification Type:MinorLast Reviewed:1/8/2003
Keywords:kbprb KB109801