none
Centrar dos Formularios RRS feed

  • Pregunta

  • Buenas noches señores.... mi pregunta actual es la siguiente:

    Tengo un formulario que al abrirlo, lo centro en la pantalla con la instrucción CenterScreen de su propiedad StarPosition; lo que pretendo hace es lo siguiente.

    Este formulario abre otro formulario Modal con la instrucción ShowDialog... pero se debe posicionar en la parte inferior de primer formulario... (o sea, el primer formulario arriba y el nuevo que se ha abierto, inmediatamente abajo)... la cuestión es, que al abrirse el segundo formulario, ambos ya no quedan en el centro de la pantalla...

    Como hago para "re-posicionarlos" para que queden en el centro de la pantalla ??.

    Ambos formularios tiene el mismo ancho, pero diferente altura...

    Gracias por su valiosa ayuda...

    domingo, 18 de marzo de 2018 2:45

Respuestas

  • Señores, agradezco mucho su guia para resolver este problema planteado y quisiera comentarles que practicamente ya lo he resuelto utilizando los aportes que me ha dado Williams. He aqui como lo hice:

    En el modulo principal, cree unas variables globales que me servirian para tal fin.... estas son las siguientes:

    Public AltoFrm01 As Double = Frm01.Height
    Public AltoFrm02 As Double = Frm02.Height
    Public AltoPantalla As Double = My.Computer.Screen.Bounds.Height
    Public AnchoPantalla As Double = My.Computer.Screen.Bounds.Width

    Luego... en el evento Load del Frm01 coloco el formulario en la parte central (ya que solamente el esta abierto) y guardo esas coordenadas.

    Me.Location = New Point((AnchoPantalla / 2) - (Me.Size.Width / 2), (AltoPantalla / 2) - (AltoFrm01/ 2))
    
    PosIniX = Me.Location.X
    PosIniY = Me.Location.Y

    Luego... cuando hace la llamada al Frm02, hago lo aconsejado por Williams con unas modificaciones:

    Using f2 As New Frm02
        Me.Location = New Point((AnchoPantalla / 2) - (Me.Size.Width / 2), (AltoFrm01/ 2) - (AltoFrm02/ 2))
    
        f2.StartPosition = FormStartPosition.Manual
        f2.Location = New Point(Me.Left, Me.Top + Me.Height)
        f2.ShowDialog()
    End Using
    
    'Al salir del Frm02, muevo al centro el formulario con respecto a la pantalla
    Me.Location = New Point(PosIniX, PosIniY)

    De nuevo muchas gracias y hasta la proxima...

    • Marcado como respuesta wichortiz lunes, 19 de marzo de 2018 16:29
    lunes, 19 de marzo de 2018 16:28

Todas las respuestas

  • Hola:
    Este es el resultado.

    Al Form1 en su propiedad StarPosition le pones CenterScreen.
    Copia y pega el siguiente código

    Public Class Form1
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Using loForm As New Form2
                loForm.ShowDialog()
            End Using
        End Sub
    End Class
    Public Class Form2
        Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
            lP_Centrar()
        End Sub

        Private Sub lP_Centrar()
            Dim tamaño As Rectangle = My.Computer.Screen.Bounds
            Dim posicionX As Integer = (tamaño.Width - Me.Width) \ 2
            Dim posicionY As Integer = (tamaño.Height - Me.Height) \ 2
            Me.Location = New Point(posicionX, posicionY)
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos
    • Propuesto como respuesta Pablo Rubio domingo, 18 de marzo de 2018 15:35
    domingo, 18 de marzo de 2018 7:43
  • Muchisimas gracias Carlos.... segun veo en la imagen que has colocado y en el codigo, lo que hace la funcion IP_centrar() es centrar solamente el formulario2 y lo que yo pretendo es colocar el form1 arriba del form2 (o sea, el form2 seguido del form1), o de otra manera, el form2 al pie del form1... y ambos centrarlos en la pantalla....

    Algo como esto...

    domingo, 18 de marzo de 2018 13:33
  • Using f2 As New Form2
    
    	Me.Location = New Point(Me.Location.X, Me.Location.Y - CInt(f2.Height / 2))
    
    	f2.StartPosition = FormStartPosition.Manual
    	f2.Location = New Point(Me.Left + CInt(f2.Width / 2), Me.Top + Me.Height)
    	f2.ShowDialog()
    End Using

    Inicia el formulario principal con la propiedad StartPosition configurada en CenterScreen.

    domingo, 18 de marzo de 2018 17:14
  • Muchisimas Gracias Williams... pero fijate que no me funciona... mueve correctamente el Form1, pero la posicion en la que pone el form2 no es la adecuada... te muestro una imagen.

    Asi es como se ve... falta bajarlo un poco y ponerlo mas al centro.

    domingo, 18 de marzo de 2018 18:15
  • Señores, agradezco mucho su guia para resolver este problema planteado y quisiera comentarles que practicamente ya lo he resuelto utilizando los aportes que me ha dado Williams. He aqui como lo hice:

    En el modulo principal, cree unas variables globales que me servirian para tal fin.... estas son las siguientes:

    Public AltoFrm01 As Double = Frm01.Height
    Public AltoFrm02 As Double = Frm02.Height
    Public AltoPantalla As Double = My.Computer.Screen.Bounds.Height
    Public AnchoPantalla As Double = My.Computer.Screen.Bounds.Width

    Luego... en el evento Load del Frm01 coloco el formulario en la parte central (ya que solamente el esta abierto) y guardo esas coordenadas.

    Me.Location = New Point((AnchoPantalla / 2) - (Me.Size.Width / 2), (AltoPantalla / 2) - (AltoFrm01/ 2))
    
    PosIniX = Me.Location.X
    PosIniY = Me.Location.Y

    Luego... cuando hace la llamada al Frm02, hago lo aconsejado por Williams con unas modificaciones:

    Using f2 As New Frm02
        Me.Location = New Point((AnchoPantalla / 2) - (Me.Size.Width / 2), (AltoFrm01/ 2) - (AltoFrm02/ 2))
    
        f2.StartPosition = FormStartPosition.Manual
        f2.Location = New Point(Me.Left, Me.Top + Me.Height)
        f2.ShowDialog()
    End Using
    
    'Al salir del Frm02, muevo al centro el formulario con respecto a la pantalla
    Me.Location = New Point(PosIniX, PosIniY)

    De nuevo muchas gracias y hasta la proxima...

    • Marcado como respuesta wichortiz lunes, 19 de marzo de 2018 16:29
    lunes, 19 de marzo de 2018 16:28