Here is a code block to do JUST what you want.
NOTE:
Its not my own code, although i did write something similar over 10 years ago.
This sample is from
Planet Source Code
Every time i tried to paste the link it conked out for some mad reason.
So i have simply pasted the code below.
Option Explicit On
Public Class Form1
Dim c(6, 0) As String
Dim xx, yy As Long
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
xx = Me.ClientSize.Width
yy = Me.ClientSize.Height
taga(Me, xx, yy)
End Sub
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Dim sX, sY As Double
Dim j As Integer
On Error Resume Next
sX = Me.ClientSize.Width / xx
sY = Me.ClientSize.Height / yy
For j = 1 To c.GetUpperBound(1)
mudar(Me, c(0, j), j, sX, sY)
Next j
End Sub
Private Sub taga(ByVal ct As Object, ByVal w As Long, ByVal h As Long)
Dim i, k As Integer
Dim ctl As Control
For Each ctl In ct.Controls
If ctl.Name = "" Then Exit For
k = c.GetUpperBound(1)
ReDim Preserve c(6, k + 1)
c(0, k + 1) = ctl.Name
c(1, k + 1) = ctl.Left
c(2, k + 1) = ctl.Top
c(3, k + 1) = ctl.Width
c(4, k + 1) = ctl.Height
c(5, k + 1) = ctl.Font.Size
c(6, k + 1) = ctl.Font.Style
i = ctl.Controls.Count
If i > 0 Then
taga(ctl, ctl.Width, ctl.Height)
End If
Next ctl
End Sub
Private Sub mudar(ByVal cm As Object, ByVal s As String, ByVal n As Integer, ByVal x As Double, ByVal y As Double)
Dim ct As Control
For Each ct In cm.controls
If ct.Name = s Then
ct.Left = c(1, n) * x
ct.Top = c(2, n) * y
ct.Width = c(3, n) * x
ct.Height = c(4, n) * y
If x < y Then
ct.Font = New System.Drawing.Font(ct.Font.Name, c(5, n) * x)
Else
ct.Font = New System.Drawing.Font(ct.Font.Name, c(5, n) * y)
End If
ct.Font = New System.Drawing.Font(ct.Font, c(6, n))
Exit For
Else
mudar(ct, s, n, x, y)
End If
Next
End Sub
End Class