none
Ajustar Formularios y Controles a la resolucion de la pantalla RRS feed

  • Pregunta

  • Hola a todos, primero que nada, ya se que esta consulta ya ha sido realizada, pero son consultas de años anteriores y no tienen respuestas practicas, por eso la reformulo.

    Tengo una aplicacion Winforms en VB2010 (sobre win7 no se si afecta en algo...) con varios Formularios, el problema es cuando corro la aplicacion en otras PCs que tienen resoluciones de pantallas diferentes a la mia, los Formularios tienden a deformarse, lo mismo los controles y hasta la tipografia, por ej las palabras no entran en los Labels, alguna ayuda con este problema?

     

    Alguien sabe o tiene un ejemplo de como se aplica este concepto? http://technet.microsoft.com/es-ni/library/ms229605%28d=lightweight,v=VS.90%29.aspx

     

    Saludos,


    Jorge Conil
    • Cambiado Enrique M. Montejo sábado, 8 de octubre de 2011 6:28 Windows Forms (De:Lenguaje VB.NET)
    jueves, 19 de mayo de 2011 15:31

Todas las respuestas

  • hola

    valida si las tecnicas mencionadas aqui no ayudan

     

    Ajustar el tamaño y la escala de formularios Windows Forms

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    jueves, 19 de mayo de 2011 15:43
  • Gracias Leandro como siempre por la info, la veo y te comento luego, pero en principio pareceria que puede ser la solucion.

     

    Saludos,


    Jorge Conil
    jueves, 19 de mayo de 2011 20:09
  • Hola Leandro,

    Lei el link que me dejaste y encontre lo mismo en la ayuda del Visual Studio, lo copio a continuacion:

    La propiedad AutoScaleMode especifica el modo de la escala automática actual de este control. Escalar por Font es útil si desea ensanchar o encoger el control o formulario según el tamaño de las fuentes del sistema operativo, y se debería usar cuando el tamaño absoluto del control o formulario no importe. Escalar por Dpi es útil si desea ajustar el tamaño de un control o formulario respecto a la pantalla. Por ejemplo, si desea usar la escala de puntos por pulgada (PPP) en un control que muestra un diagrama u otro gráfico de manera que siempre ocupe un porcentaje determinado de la pantalla.

    De acuerdo con esto, modifique varios formularios cambiando la propiedad 'AutoScaleMode' a DPI.

    Si bien note algunas mejoras, el problema aun persiste, hay controles como los labels que se ensanchan mucho en ciertas resoluciones y terminan quedando fuera del area visible del formulario.

    Si se te ocurre alguna otra sugerencia, te escucho...

     

    Saludos,


    Jorge Conil
    viernes, 20 de mayo de 2011 16:51
  • Hola!

    En el evento Load del formulario ensayé modificando la escala con:

     

    this.AutoScaleDimensions = new System.Drawing.SizeF(100F, 110F);
    this.PerformAutoScale();

     

    El formulario tiene autoscalemode en DPI.

    Funciona ya que el formulario se acomoda a la nueva escala, pero me encontré con que el tamaño de la fuente no cambia. Los botones se ajustan, los labels también, las imagenes, pero la fuente queda del mismo tamaño y se pierde del control.

    Alguien que me pueda regalar alguna idea.

    Gracias!

     


    viernes, 7 de octubre de 2011 23:35
  • Que mas propiedades manejaste? porque yo puse lo que tienes aquí y también esta en DPI, y no funcionó :/
    lunes, 18 de abril de 2016 16:21
  • No se si esto te sirva pero a para mi fue lo que mas se acerco a lo que quería.

    esta función la mando a llamar desde el load, las variables formancho y formalto son los valores con las que diseñe el form, osea que si en mi diseñador el alto del form es 200 entonces formalto=200 y la propiedad de windowstate esta en maximized para que pueda hacer el calculo con el nuevo valor de Me.Height aun que tal vez puedas obtener la resolucion de pantalla antes y reemplazar los valores correspondientes en Me.Height y Me.Width eso se me acaba de ocurrir

        Sub escalar1()
            Dim f As New System.Drawing.SizeF
            f.Height = ((100 / formalto) * Me.Height) / 100
            f.Width = ((100 / formancho) * Me.Width) / 100
            For Each ctrl As Control In Me.Controls
                ctrl.Scale(f)
                Try
                    'controlo el error por si no tiene propiedad font
                    ctrl.Font = New Font(ctrl.Font.OriginalFontName, ctrl.Font.Size * f.Height, ctrl.Font.Style, GraphicsUnit.Point)
                Catch ex As Exception
                End Try
                If (TypeOf (ctrl) Is GroupBox) Then 'si el control es un groupbox escalo sus controles internos
                    For Each ctrlAUX As Control In ctrl.Controls
                        ctrlAUX.Scale(f)
                        Try
                            ctrlAUX.Font = New Font(ctrlAUX.Font.OriginalFontName, ctrlAUX.Font.Size * f.Height, ctrlAUX.Font.Style, GraphicsUnit.Point)
                        Catch ex As Exception
                        End Try
                    Next
                End If
            Next
        End Sub

    funciona parcialmente por que hay algunos controles que por X o Y razon no se escalan, y me parece que tambien hay que escalar las columnas de los DataGridView



    • Editado RHCRD lunes, 18 de abril de 2016 20:14
    lunes, 18 de abril de 2016 19:59
  • Estimado , tuviste alguna solucion para tu caso, estoy en el mismo problema

    Gracias

    miércoles, 7 de noviembre de 2018 14:13