none
Tamaño controles al maximizar Formulario RRS feed

  • Pregunta

  • Hay varios temas sobre esto pero todos dicen usar la propiedad Anchor pero no es así lo que necesito.

    Navegando por Internet encontré este código

    Public Class Form1
    'Declaramos variables para el ancho y el alto'
    Dim ancho As Integer
    Dim alto As Integer
    'Variable para la primera ejecución y que no utilice el resize'
    Dim primero As Boolean
    
    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
    'Por si ocurre algun error inesperado'
    On Error Resume Next
    'Variables para los porcentajes'
    Dim porcancho As Integer
    Dim porcalto As Integer
    ' Aquí evitamos lo innecesario de ajustar cuando la ventana se minimiza'
    If WindowState = FormWindowState.Minimized Then
    'Simplemente salimos del procedimiento.'
    Exit Sub
    End If
    'Si es la primera ejecución...'
    If primero = False Then
    'Damos valor verdadero a la variable para la próxima'
    primero = True
    'Salimos'
    Exit Sub
    End If
    'Obtenemos los porcentaje de ancho y alto'
    porcancho = FormatNumber((Me.Width * 100) / ancho, 2)
    porcalto = FormatNumber((Me.Height * 100) / alto, 2)
    'recorremos absolutamente todos los controles.'
    For Each CControl As Control In Me.Controls
    'Asignamos la nueva posición y dimensión.'
    CControl.Top = (CControl.Top * porcalto) / 100
    CControl.Left = (CControl.Left * porcancho) / 100
    CControl.Width = (CControl.Width * porcancho) / 100
    CControl.Height = (CControl.Height * porcalto) / 100
    Next
    'A las variables globales a nivel del formulario'
    'Le asignamos el actual valor.'
    ancho = Me.Width
    alto = Me.Height
    End Sub
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'Inicializamos valor a las variables globales.'
    ancho = Me.Width
    alto = Me.Height
    
    End Sub
    End Class

    Maximiza bien el problema es al volver a utilizar el código para restaurar la pantalla los controles comienzan a hacerse mas pequeños al tamaño inicial. Y no se hacen de manera uniforme osea un control se hace 2 puntos mas chico de ancho mientras el otro se hace 3. El código sirve para maximizar mas no para restaurar entonces al volver a maximizar como está mal restaurado ya se daña todo.

    Cual sería el cálculo para que los controles se ubiquen bien al restaurar?

    Por cierto el código aumenta el alto de los controles y como saben con el textbox no se puede eso hay forma de hacer que se cambie el tamaño del texto según la pantalla pero no control por control?

    Otra pregunta mi programa es en 1024 x 728 entonces hay forma de que el programa se acomode a la pantalla cuando sea una resolución menor? Solo menor ya que mayor el programa se abría como es y si lo quieren agrandar usarían el código que les mostré.

    Saludos.

    jueves, 21 de marzo de 2013 8:27

Todas las respuestas

  • ¿porque no utilizas el escalado automático?

    Mira este enlace   Ajuste automático de escala en formularios Windows Forms


    Saludos, Javier J

    jueves, 21 de marzo de 2013 10:15
  • No he entendido muy bien el uso ni como usarlo pero igual ya arreglé el código era un problema con los decimales.

    Pongo el código por si acaso a alguien le sea útil.

    'Por si ocurre algun error inesperado'
            On Error Resume Next
            'Variables para los porcentajes'
            Dim porcancho As Single
            Dim porcalto As Single
    
            ' Aquí evitamos lo innecesario de ajustar cuando la ventana se minimiza'
            If WindowState = FormWindowState.Minimized Then
                'Simplemente salimos del procedimiento.'
                Exit Sub
            End If
            'Si es la primera ejecución...'
    
            'Obtenemos los porcentaje de ancho y alto'
            porcancho = (Me.Width * 100) / ancho
            porcalto = (Me.Height * 100) / alto
    
            'recorremos absolutamente todos los controles.'
    
            For Each CControl As Control In Me.Controls
    
                'Asignamos la nueva posición y dimensión.'
                CControl.Top = FormatNumber((CControl.Top * porcalto) / 100, 2)
                CControl.Left = FormatNumber((CControl.Left * porcancho) / 100, 2)
                CControl.Width = FormatNumber(((CControl.Width * porcancho) / 100), 2)
                CControl.Height = FormatNumber((CControl.Height * porcalto) / 100, 2)
                TextBox8.Text = FormatNumber(((CControl.Width * porcancho) / 100), 2)
            Next
            'A las variables globales a nivel del formulario'
            'Le asignamos el actual valor.'
            ancho = Me.Width
            alto = Me.Height

    Minimiza y Maximiza perfecto.

    Por cierto Javier no sabes como hacer que el formulario se adapte a la resolución en caso de que sea menor a la resolución del programa? Utilizo el enlace que pusiste?

    Gracias y Saludos.

    viernes, 22 de marzo de 2013 6:00