Principales respuestas
Centrar dos Formularios

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...
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.WidthLuego... 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
Todas las respuestas
-
Hola:
Este es el resultado.Al Form1 en su propiedad StarPosition le pones CenterScreen.
Copia y pega el siguiente códigoPublic Class Form1Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Using loForm As New Form2
loForm.ShowDialog()
End Using
End Sub
End ClassPublic Class Form2
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
lP_Centrar()
End SubPrivate 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 ClassUn saludo desde Bilbo
Carlos- Propuesto como respuesta Pablo Rubio domingo, 18 de marzo de 2018 15:35
-
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...
-
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.
-
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.
-
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.WidthLuego... 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