Centre controls on the screen


Your Access forms might be running on all sorts of different computers with different sizes of screen. The controls might look good when you design the form but they'll all be crowded on the left-hand side if the user maximises the form on a larger screen.

The code below is my solution. I've kept it simple by restricting the user's choices:

  • The form always runs maximised.
  • The user can't minimize or resize the form.
  • Controls stay the same size.
  • Controls are only centred horizontally.

Put this code in the form's Open method:

Private Sub Form_Open(Cancel As Integer)
   Dim intOrigWidth As Integer    ' Original form width
   Dim intOffSet As Integer       ' Distance to move each control

   intOrigWidth = Me.WindowWidth
   DoCmd.Maximize
   intOffset = (Me.WindowWidth - intOrigWidth) / 2
   '-- Freeze the screen to prevent flickering
   Me.Painting = False
   For Each ctl In Me.Controls
     ctl.Left = ctl.Left + intOffset
   Next ctl
   '-- Show all the changes at once
   Me.Painting = True
End Sub

Set the following properties:

  • Dividing Lines = No.
  • Border Style = None.
  • Min Max buttons = No.

You end up with a form that looks like this:

alt='[Controls centred in screen]'>

Problems

A better solution would be to write much more code to move and resize the controls as the user changes the size of the form. This gets difficult because some controls (like textboxes) must stay the same height whereas others (like listboxes) must get larger as the form gets taller. Restricting myself to horizontal movement kept it simple.

If the form includes containers like Tabbed Controls or Option Groups then you'll need to add extra code to handle them. Use the ControlType property inside the loop to detect these controls.