| Prerequisites | 
   
      | Network or DUN connection. | 
   
      | 
 | 
   
      | This code is probably the second thing a VB
                     developer asks (the first being how to centre on a screen). Just place the CentreFormInParent routine into a 
       BAS module
                     subroutine declared Public so it's available to any form, then call it 
       from the "child" form by passing the child form name  and the parent form to position 
       it within. | 
   
      |  | 
   
      | BAS
         Module Code | 
   
      |   | 
   
      | Place the following code into the general declarations
         area of a bas module: | 
   
      | 
 | 
   
      | Option Explicit ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved.
' Some pages may also contain other copyrights by the author.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce 
'               or publish this code on any web site,
'               online service, or distribute as source 
'               on any media without express permission.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Public Sub CentreFormInParent(cfrm As Form, pfrm As Form)
    
   'cfrm=child form
   'pfrm=parent form 
    cfrm.Move pfrm.Left + (pfrm.Width - cfrm.Width) / 2, _
              pfrm.Top + (pfrm.Height - cfrm.Height) / 2
End Sub | 
   
      |  | 
   
      | Form
         Code | 
   
      |   | 
   
      | In any form to center within another, place this into the form load, substituting the real parent form name: | 
   
      | 
 | 
   
      | Private Sub Form_Load()
   
  'Called from within the child form. Pass 
  'a reference Me and the name of the 
  ''parent' form to centre within
   CentreFormInParent Me, parent_form_name 
End Sub | 
   
      |  | 
   
      | Comments | 
   
      | Often you will see the recommendation that to centre a form you should set the form's left and top properties as in:       Me.Left = Screen.Width
                        / 2Me.Top = Screen.Height / 2
 
 While this method is certainly not incorrect, its execution involves two commands, and, on a slower system or one without
                        accelerated video, the user might see the form shift position first horizontally as the '.Left =' code is executed, then
                        vertically as the '.Top =' code is executed.  The Move command performs both horizontal and vertical repositioning
                        together in one move.  For the record, the 
                        above one-liner method spelled out is:
 
       Public Sub 
       CentreFormInParent(cfrm As Form, pfrm As Form)
 Dim childLeft As Long
 Dim childTop As Long
 Dim parentLeft As Long
 Dim parentTop As Long
 
 parentLeft = pfrm.Left
 parentTop = pfrm.Top
 childLeft = parentLeft + ((pfrm.Width - cfrm.Width) / 2)
 childTop = parentTop + ((pfrm.Height - cfrm.Height) / 2)
 
 cfrm.Move childLeft, childTop
 
 End Sub
 | 
   
      | 
 |