¿Cómo ajustar el tamaño de la ventana según la resolución?

Me llamo Milania Garcia, estoy haciendo un programa en mi PC, en la cual tengo una pantalla cuya resolución es de 1920 por 1080. Todo va de maravilla; pero el problema es que cuando instalo el programa en otro equipo y la resolución es menor, pues los formularios no caben y hay que usar las barras de desplazamiento, detalle que en lo personal no me agrada.

He buscado en google alguna solución pero no la he encontrado.

Me preguntaba si tú pudieras darme alguna idea de cómo puedo hacer para que mi programa se adapte a la resolución acorde al equipo donde lo instale.

2 Respuestas

Respuesta

Gracias de verdad lo probé solo con formulario de resolución 1366 x 768 y monte een una resolución de 800 x 600 y se ajusto bastante bien, ahora debo seguir probándolo.

Respuesta
4

Tienes que obtener la resolución de la pantalla y en base a las medidas de resolución (alto y ancho) redimensionar tus controles y los formularios. No se que lenguaje estas utilizando así que no puedo ayudarte con código por ahora.

Gracias por contestar.

Disculpa por no haberte especificado el lenguaje.

Estoy con vb net 2010.

De acuerdo a lo que me indicas, una vez que obtenga la resolución, ¿cómo re dimensiono los controles?

Gracias nuevamente.

Tienes que detectar la resolución de la pantalla Destino y calcular las nuevas dimensiones de formulario, te pongo un código de ejemplo si el tamaño del formulario fuera 600x600, y el formulario a redimensionar se llamara Form1.

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim AnchoPantallaInicial As Integer = 1920
        Dim AltoPantallaInicial As Integer = 1080
        Dim ResolucionDestino As Size
        ResolucionDestino = System.Windows.Forms.SystemInformation.PrimaryMonitorSize
        Dim AnchoPantallaDestino As Integer = ResolucionDestino.Width
        Dim AltoPantallaDestino As Integer = ResolucionDestino.Height
        Dim AnchoFormularioInicial As Double = 600
        Dim AltoformularioInicial As Double = 600
        Dim AnchoFormularioDestino = CDbl((AnchoFormularioInicial / AnchoPantallaInicial) * AnchoPantallaDestino)
        Dim AltoFormularioDestino = CDbl((AltoformularioInicial / AltoPantallaInicial) * AltoPantallaDestino)
        Me.Width = AnchoFormularioDestino
        Me.Height = AltoFormularioDestino
    End Sub
End Class

Ahora para que las controles cambien su tamaño junto con el formulario debes utilizar la propiedad anchor, minimumsize y maximumsize de cada control; el anchor te permitirá anclar los controles en las posiciones top, bottom, left y right iniciales, es decir si pones left el control se quedara a la distancia que lo pongas al lado izquierdo y no cambiara de tamaño, y si pones left y right el control se quedara a la distancia que lo pongas tanto del lado izquierdo como el del derecho, lo cual significa que el control modificara su tamaño junto con el del formulario. la propiedad minimumsize y maximumsize permitirán controlar que tanto se re dimensionaran las controles ya que puede que desaparezcan si no se controla su tamaño máximo y mínimo.

Actualizo mi respuesta, he encontrado una clase que estaba escrita en C# y que he traducido a VB la cual ajusta los formularios a la resolución de pantalla.

La clase de debe de llamar desde el evento load del formulario.

Clase

Public Class clsResizeForm
    Dim f_HeightRatio As Single = New Single
    Dim f_WidthRatio As Single = New Single
    Public Sub ResizeForm(ObjForm As Form, DesignerWidth As Integer, DesignerHeight As Integer)
        Dim i_StandardHeight As Integer = DesignerHeight
        Dim i_StandardWidth As Integer = DesignerWidth
        Dim i_PresentHeight As Integer = Screen.PrimaryScreen.Bounds.Height
        Dim i_PresentWidth As Integer = Screen.PrimaryScreen.Bounds.Width
        f_HeightRatio = (CSng(i_PresentHeight) / CSng(i_StandardHeight))
        f_WidthRatio = (CSng(i_PresentWidth) / CSng(i_StandardWidth))
        ObjForm.AutoScaleMode = AutoScaleMode.None
        ObjForm.Scale(New SizeF(f_WidthRatio, f_HeightRatio))
        For Each c As Control In ObjForm.Controls
            If c.HasChildren Then
                ResizeControlStore(c)
            Else
                c.Font = New Font(c.Font.FontFamily, c.Font.Size * f_HeightRatio, c.Font.Style, c.Font.Unit, (CByte(0)))
            End If
        Next
        ObjForm.Font = New Font(ObjForm.Font.FontFamily, ObjForm.Font.Size * f_HeightRatio, ObjForm.Font.Style, ObjForm.Font.Unit, (CByte(0)))
    End Sub
    Private Sub ResizeControlStore(objCtl As Control)
        If objCtl.HasChildren Then
            For Each cChildren As Control In objCtl.Controls
                If cChildren.HasChildren Then
                    ResizeControlStore(cChildren)
                Else
                    cChildren.Font = New Font(cChildren.Font.FontFamily, cChildren.Font.Size * f_HeightRatio, cChildren.Font.Style, cChildren.Font.Unit, (CByte(0)))
                End If
            Next
            objCtl.Font = New Font(objCtl.Font.FontFamily, objCtl.Font.Size * f_HeightRatio, objCtl.Font.Style, objCtl.Font.Unit, (CByte(0)))
        Else
            objCtl.Font = New Font(objCtl.Font.FontFamily, objCtl.Font.Size * f_HeightRatio, objCtl.Font.Style, objCtl.Font.Unit, (CByte(0)))
        End If
    End Sub
End Class

Evento load del formulario

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
        Dim classResize As New clsResizeForm
        classResize.ResizeForm(Me, [color=#006666]1920[/color], 1080)
    End Sub
End Class

Fijate que cuando se llama a la clase se pone la resolución con la que hiciste el formulario, en tu caso es 1920 de ancho por 1080 de alto. Esta clase también cambia el tamaño de la fuente para ajustarlo al tamaño de los controles ya redimensionados.

Muchas gracias amigo por tu tiempo y ayuda. Voy a estudiar y probar lo que me explicas.

Te mando un saludo y un beso, que estés muy bien.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas