This code is just for one of the aspects: the left position. But the principle is the same for the top position. And if you want, the height and the width.
Use ratios to find the value that you need. In each situation, you need 4 values. One value has to be calculated.
On loading you can extract the original height and width of your form. And on a resize event, you can extract the new size and width of your form.
The values that you might want to change are the left, the top, the width, and height positions of your controls. You don't need a picture box to manage your controls. The new top, left, height, and width positions can be calculated with ratios based on its previous position.
Here's one formula for finding the new left position using ratios:
CurrentLeft / CurrentWidth = NewLeft/NewWidth
Use the same principle for calculating a new top position, height, etc.
Option Explicit
Dim lngOrigW As Long, lngOrigH As Long
Private Sub Form_Load()
lngOrigW = Me.Width
lngOrigH = Me.Height
End Sub
Private Sub Form_Resize()
On Error GoTo Resize_ERROR
Dim ctl As Control, lngCurLeft As Long, lngCurTop As Long
Dim lngNewLeft As Long, lngNewTop As Long, lngNewWidth As Long, lngNewHeight As Long
Dim lngCurWidth As Long, lngCurHeight As Long
lngCurWidth = Me.Width
Debug.Print 3, lngCurWidth
lngCurHeight = Me.Height
Debug.Print 4, lngCurHeight
For Each ctl In Controls
Select Case TypeName(ctl)
Case "CommandButton"
lngCurLeft = ctl.Left
lngNewLeft = (lngCurLeft * lngCurWidth) / lngOrigW
ctl.Move lngNewLeft
Case "Label"
Case Else
End Select
Next
lngOrigW = lngCurWidth
lngOrigH = lngCurHeight
Exit Sub
Resize_ERROR:
End Sub