none
Error ResizeForm RRS feed

  • Pregunta

  • Hola

    Estoy tratando de ajustar la resoluciones de las pantalla para que al momento de ejecutar la aplicación con otra resolución se adapten la pantalla con sus controles, etc.

    Utilizo esta clase:

    Public Class ClsResolucion
    
        Private Sub ajustarResolucion(ByVal formulario As System.Windows.Forms.Form)
            Dim ancho As [String] = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size.Width.ToString()
            'Obtengo el ancho de la pantalla
            Dim alto As [String] = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Size.Height.ToString()
            'Obtengo el alto de la pantalla
            Dim tamano As [String] = ancho + "x" + alto
            'Concateno para utilizarlo en el switch
            Select Case tamano
                Case "800x600"
                    cambiarResolucion(formulario, 110.0F, 110.0F)
                    'Hago el ajuste con esta función
                    Exit Select
                Case "1024x600"
                    cambiarResolucion(formulario, 96.0F, 110.0F)
                    Exit Select
                Case Else
                    cambiarResolucion(formulario, 96.0F, 96.0F)
                    Exit Select
            End Select
        End Sub
    
        Private Shared Sub cambiarResolucion(ByVal formulario As System.Windows.Forms.Form, ByVal ancho As Single, ByVal alto As Single)
            formulario.AutoScaleDimensions = New System.Drawing.SizeF(ancho, alto)
            'Ajusto la resolución
            formulario.PerformAutoScale()
            'Escalo el control contenedor y sus elementos secundarios.
        End Sub
    
    End Class

    Trato de hacerlo de esta manera en el load del form:

    Dim VResolucion As New ClsResolucion
    VResolucion.ResizeForm(Me, 1360, 768)

    Pero me sale un error y por lo tanto no me deja ejecutar

    Error 20 'ResizeForm' no es un miembro de '....ClsResolucion'.

    Puede ser viable el código que utilizo para hacer lo que quiero? o se hace de otra forma?

    Desde ya gracias, saludos!


    jueves, 18 de mayo de 2017 4:18

Respuestas

  • Hola:
    En un Form como el de las imagenes, copia y pega el siguiente código

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
            Dim objFormResizer As New FormResizer()
            Dim tamaño As Rectangle = My.Computer.Screen.Bounds
            Me.txtAlto.Text = tamaño.Height.ToString
            Me.txtAncho.Text = tamaño.Width.ToString
            objFormResizer.ResizeForm(Me, tamaño.Height, tamaño.Width)
        End Sub

        Private Sub linkLabel1_LinkClicked(ByVal sender As Object, ByVal e As LinkLabelLinkClickedEventArgs) Handles linkLabel1.LinkClicked
            Dim objFileDialog As New OpenFileDialog()
            If objFileDialog.ShowDialog() = DialogResult.OK Then
                Try
                    pbStudentImage.ImageLocation = objFileDialog.FileName
                Catch
                    MessageBox.Show("Seleccione Formato de imagen válido", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End Try
            End If
        End Sub
        Private Sub btnCambiar_Click(sender As Object, e As EventArgs) Handles btnCambiar.Click
            Dim objFormResizer As New FormResizer()
            objFormResizer.ResizeForm(Me, CInt(Me.txtAlto.Text), CInt(Me.txtAncho.Text))
        End Sub
    End Class
    Tienes que añadir una clase llamada FormResizer cuyo codigo es el siguiente
    Imports System.Collections.Generic
    Imports System.Text
    Imports System.Windows.Forms
    Imports System.Drawing
    Imports System.ComponentModel
    Public Class FormResizer
        'Consideraciones:
        'Cambiar el modo de AutoSize formulario en Ninguno.
        Private f_HeightRatio As New Single()
        Private f_WidthRatio As New Single()
        Public Sub ResizeForm(ByVal ObjForm As Form, ByVal DesignerHeight As Integer, ByVal DesignerWidth As Integer)
            '#Region "Código para cambiar el tamaño de fuente y cambiar de acuerdo a la Resolución"
            'Especifique aquí el componente Resolución Y en la que este formulario ha sido diseñado
            'Por ejemplo, si el formulario está diseñado en 800 * 600 Resolución continuación DesignerHeight = 600
            Dim i_StandardHeight As Integer = DesignerHeight
            'Especifique aquí el componente Resolución X en el que este formulario ha sido diseñado
            'Por ejemplo, si el formulario está diseñado en 800 * 600 Resolución continuación DesignerWidth = 800
            Dim i_StandardWidth As Integer = DesignerWidth
            'Resolución Presente Altura
            Dim i_PresentHeight As Integer = Screen.PrimaryScreen.Bounds.Height
            'Resolución Presente Anchura
            Dim i_PresentWidth As Integer = Screen.PrimaryScreen.Bounds.Width
            f_HeightRatio = CSng(CSng(i_PresentHeight) / CSng(i_StandardHeight))
            f_WidthRatio = CSng(CSng(i_PresentWidth) / CSng(i_StandardWidth))
            'Hacer que el modo de escala automática = Ninguno
            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 Region
        End Sub
        ''' <summary>
        ''' Esta función se usa para cambiar la fuente de los controles que están anidados en otros controles.
        ''' </summary>
        ''' <param name="objCtl"></param>
        Private Sub ResizeControlStore(ByVal 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

    Un saludo desde Bilbo
    Carlos
    jueves, 18 de mayo de 2017 19:47

Todas las respuestas

  • 'ResizeForm' no es un miembro de '....ClsResolucion'.

    Tiene razón el mensaje de error: En tu clase ClsResolucion no hay ningún miembro que se llame "ResizeForm". Por otra parte, sí que tienes un miembro que se llama "CambiarResolucion". ¿No será ese el que realmente tendrías que llamar en lugar de "ResizeForm"?
    jueves, 18 de mayo de 2017 7:00
  • Si unos minutos después de la publicación me di cuenta del error.

    Hice lo mencionado y no funciona. Alguna solución para que se ajuste a la resolución?

    jueves, 18 de mayo de 2017 13:17
  • Saludo 

    Federico32113

    Me pasaba mucho hasta que encontre esto 

    mucha suerte.


    joselin_herasme21@hotmail.com

    jueves, 18 de mayo de 2017 18:12
  • Hola:
    En un Form como el de las imagenes, copia y pega el siguiente código

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
            Dim objFormResizer As New FormResizer()
            Dim tamaño As Rectangle = My.Computer.Screen.Bounds
            Me.txtAlto.Text = tamaño.Height.ToString
            Me.txtAncho.Text = tamaño.Width.ToString
            objFormResizer.ResizeForm(Me, tamaño.Height, tamaño.Width)
        End Sub

        Private Sub linkLabel1_LinkClicked(ByVal sender As Object, ByVal e As LinkLabelLinkClickedEventArgs) Handles linkLabel1.LinkClicked
            Dim objFileDialog As New OpenFileDialog()
            If objFileDialog.ShowDialog() = DialogResult.OK Then
                Try
                    pbStudentImage.ImageLocation = objFileDialog.FileName
                Catch
                    MessageBox.Show("Seleccione Formato de imagen válido", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)
                End Try
            End If
        End Sub
        Private Sub btnCambiar_Click(sender As Object, e As EventArgs) Handles btnCambiar.Click
            Dim objFormResizer As New FormResizer()
            objFormResizer.ResizeForm(Me, CInt(Me.txtAlto.Text), CInt(Me.txtAncho.Text))
        End Sub
    End Class
    Tienes que añadir una clase llamada FormResizer cuyo codigo es el siguiente
    Imports System.Collections.Generic
    Imports System.Text
    Imports System.Windows.Forms
    Imports System.Drawing
    Imports System.ComponentModel
    Public Class FormResizer
        'Consideraciones:
        'Cambiar el modo de AutoSize formulario en Ninguno.
        Private f_HeightRatio As New Single()
        Private f_WidthRatio As New Single()
        Public Sub ResizeForm(ByVal ObjForm As Form, ByVal DesignerHeight As Integer, ByVal DesignerWidth As Integer)
            '#Region "Código para cambiar el tamaño de fuente y cambiar de acuerdo a la Resolución"
            'Especifique aquí el componente Resolución Y en la que este formulario ha sido diseñado
            'Por ejemplo, si el formulario está diseñado en 800 * 600 Resolución continuación DesignerHeight = 600
            Dim i_StandardHeight As Integer = DesignerHeight
            'Especifique aquí el componente Resolución X en el que este formulario ha sido diseñado
            'Por ejemplo, si el formulario está diseñado en 800 * 600 Resolución continuación DesignerWidth = 800
            Dim i_StandardWidth As Integer = DesignerWidth
            'Resolución Presente Altura
            Dim i_PresentHeight As Integer = Screen.PrimaryScreen.Bounds.Height
            'Resolución Presente Anchura
            Dim i_PresentWidth As Integer = Screen.PrimaryScreen.Bounds.Width
            f_HeightRatio = CSng(CSng(i_PresentHeight) / CSng(i_StandardHeight))
            f_WidthRatio = CSng(CSng(i_PresentWidth) / CSng(i_StandardWidth))
            'Hacer que el modo de escala automática = Ninguno
            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 Region
        End Sub
        ''' <summary>
        ''' Esta función se usa para cambiar la fuente de los controles que están anidados en otros controles.
        ''' </summary>
        ''' <param name="objCtl"></param>
        Private Sub ResizeControlStore(ByVal 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

    Un saludo desde Bilbo
    Carlos
    jueves, 18 de mayo de 2017 19:47
  • Como aplico el código de la clase? Tengo que agregar el código a cada control?
    sábado, 20 de mayo de 2017 3:25
  • Hola:

    ¿Has probado el ejemplo tal cual esta aunque el Form no tenga todos los controles?
    Por lo menos añade 2 cajas de texto para los valores de ancho y alto

    Un saludo desde Bilbo
    Carlos
    sábado, 20 de mayo de 2017 7:25