Resolución automática en forms
Te paso uno pero es para vb6,
Quizás cambiando los eventos de los controles a los de .net logras hacerlo funcionar.
colocar el codigo en un modulo.
Option Explicit
Dim MyForm As FRMSIZE
Dim DesignX As Integer
Dim DesignY As Integer
Public FactorX, FactorY As Single
Sub Resize_For_Resolution(ByVal SFX As Single, ByVal SFY As Single, MyForm As Form)
Dim i As Integer
Dim SFFont As Single
Dim X As Integer
SFFont = (SFX + SFY) / 2 'Escala media
'Tamaño de los controles para la nueva resolución
On Error Resume Next
With MyForm
For i = 0 To .Count - 1
If TypeOf .Controls(i) Is ComboBox Or TypeName(.Controls(i)) = "DriveListBox" Or _
TypeOf .Controls(i) Is DataCombo Then
'No se puede cambiar Altura
.Controls(i).left = .Controls(i).left * SFX
.Controls(i).top = .Controls(i).top * SFY
.Controls(i).width = .Controls(i).width * SFX
Else
If TypeName(.Controls(i)) = "Timer" Or TypeName(.Controls(i)) = "ImageList" Or TypeName(.Controls(i)) = "CommonDialog" Or TypeName(.Controls(i)) = "Skinner" Or TypeName(.Controls(i)) = "ctxHookMenu" Or TypeName(.Controls(i)) = "Line" Or TypeName(.Controls(i)) = "Calendar" Or TypeName(.Controls(i)) = "Menu" Or TypeName(.Controls(i)) = "Winsock" Or TypeName(.Controls(i)) = "WhoIs" Then
Else
If TypeName(.Controls(i)) = "DataGrid" Then
.Controls(i).Move .Controls(i).left * SFX, .Controls(i).top * SFY, .Controls(i).width * SFX, .Controls(i).height * SFY
For X = 0 To .Controls(i).Splits(0).Columns.Count - 1
.Controls(i).Splits.Item(0).Columns.Item(X).width = .Controls(i).Splits.Item(0).Columns.Item(X).width * SFX
Next
ElseIf TypeName(.Controls(i)) = "ListView" Or TypeName(.Controls(i)) = "SSTab" Or TypeName(.Controls(i)) = "MSHFlexGrid" Then
.Controls(i).Move .Controls(i).left * SFX, .Controls(i).top * SFY, .Controls(i).width * SFX, .Controls(i).height * SFY
If TypeName(.Controls(i)) = "ListView" Then
For X = 1 To .Controls(i).ColumnHeaders.Count
.Controls(i).ColumnHeaders.Item(X).width = .Controls(i).ColumnHeaders.Item(X).width * SFX
Next
End If
If TypeName(.Controls(i)) = "MSHFlexGrid" Then
For X = 1 To .Controls(i).Cols - 1
If .Controls(i).ColWidth(X) > 0 Then
.Controls(i).ColWidth(X) = .Controls(i).ColWidth(X) * SFX
End If
Next
End If
Else
.Controls(i).Move .Controls(i).left * SFX, .Controls(i).top * SFY, .Controls(i).width * SFX, .Controls(i).height * SFY
End If
End If
End If
'Asegúrese de cambiar el tamaño y la posición antes de cambiar el FontSize
If TypeName(.Controls(i)) = "StatusBar" Or TypeName(.Controls(i)) = "Toolbar" Or _
TypeName(.Controls(i)) = "Shape" Or TypeName(.Controls(i)) = "Image" Or _
TypeName(.Controls(i)) = "ImageList" Or TypeName(.Controls(i)) = "Menu" Or _
TypeName(.Controls(i)) = "Skinner" Or TypeName(.Controls(i)) = "ctxHookMenu" Or _
TypeName(.Controls(i)) = "McToolBar" Or _
TypeName(.Controls(i)) = "ProgressBar" Or TypeName(.Controls(i)) = "Line" Or _
TypeName(.Controls(i)) = "Calendar" Or TypeName(.Controls(i)) = "DataList" Or _
TypeName(.Controls(i)) = "VerticalMenu" Or TypeName(.Controls(i)) = "SkinYahoo" Or _
TypeName(.Controls(i)) = "WhoIs" Or TypeName(.Controls(i)) = "vbalGrid" Or _
TypeName(.Controls(i)) = "RichTextBox" Or TypeName(.Controls(i)) = "CoolBar" Or _
TypeName(.Controls(i)) = "MSChart" Or TypeName(.Controls(i)) = "Timer" Or _
TypeName(.Controls(i)) = "TabStrip" Or TypeName(.Controls(i)) = "Winsock" Or _
TypeName(.Controls(i)) = "WebBrowser" Then
ElseIf TypeName(.Controls(i)) = "ListView" Or TypeName(.Controls(i)) = "SSTab" Then
.Controls(i).Font.size = .Controls(i).Font.size * SFFont
ElseIf TypeName(.Controls(i)) = "DataGrid" Then
.Controls(i).HeadFont.size = .Controls(i).HeadFont.size * SFFont
.Controls(i).Font.size = .Controls(i).Font.size * SFFont
ElseIf TypeName(.Controls(i)) = "DataCombo" Then
.Controls(i).Font.size = .Controls(i).Font.size * SFFont
Else
.Controls(i).FontSize = .Controls(i).FontSize * SFFont
End If
Next i
If RePosForm Then
'Nuevo Tamaño del Formulario
.Move .left * SFX, .top * SFY, .width * SFX, .height * SFY
End If
End With
End Sub
Function Centrar(Nombre As Form, Optional Ajustar As Boolean = True)
If Ajustar = True Then
AjusteVentana Nombre, Ajustar
Else
DoResize = False
End If
'** Centrar las pantallas
If FrmPrincipal.height <> Nombre.height Then
Nombre.top = (FrmPrincipal.height - Nombre.height) / 2
Nombre.left = (FrmPrincipal.width - Nombre.width) / 2
End If
End Function
Function AjusteVentana(Frm As Form, Optional Ajustar As Boolean = True)
Dim ScaleFactorX As Single, ScaleFactorY As Single ' Scaling factors
'Tamaño del Form en píxeles con una resolución de diseño
DesignX = 800
DesignY = 600
RePosForm = Ajustar 'Bandera para el posicionamiento del Formulario
DoResize = False 'Bandera de evento Resize
'Establecer los valores de la pantalla
Xtwips = Screen.TwipsPerPixelX
Ytwips = Screen.TwipsPerPixelY
XPixels = FrmPrincipal.width / Xtwips 'X Pixel Resolución
YPixels = FrmPrincipal.height / Ytwips 'Y Pixel Resolución
'Determinar los factores de escala
ScaleFactorX = (XPixels / DesignX)
ScaleFactorY = (YPixels / DesignY)
Frm.ScaleMode = 1 ' twips
Resize_For_Resolution ScaleFactorX, ScaleFactorY, Frm
MyForm.height = Frm.height 'Recordar el tamaño actual
MyForm.width = Frm.width
End Function
Function Resize(Frm As Form)
Dim ScaleFactorX As Single, ScaleFactorY As Single
If DoResize = False Then 'Para evitar bucle infinito
DoResize = True
Exit Function
End If
RePosForm = False
ScaleFactorX = Frm.width / MyForm.width '¿Cuánto cambio?
ScaleFactorY = Frm.height / MyForm.height
Resize_For_Resolution ScaleFactorX, ScaleFactorY, Frm
MyForm.height = Frm.height 'Recordar el tamaño actual
MyForm.width = Frm.width
End Function
Y en cada form en el load colocar
Centrar Me
el segundo parámetro es por si no quieres que se agrande es false, y solo se centra pero no agranda.
Atte, Joselo.