none
Como centrar formulario en pantalla al momento de maximizar

    Question

  • tengo un formulario con tamano definido, minimunsize 600, 500, y un maximunsize 1000, 600.

    pero al momento de maximizar este formulario maximizado queda en la parte superior izquierda de la pantalla, y cuando intento mover se vuelve a minimizar

     como puedo lograr que se maximize y quede en el centro de la pantalla?

    Thursday, December 13, 2012 5:28 PM

Answers

  • Thursday, December 13, 2012 9:57 PM
  • Pero hay el usuario muestra su codigo final que le resulto...

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.BackColor = System.Drawing.Color.Khaki
            Me.ClientSize = New System.Drawing.Size(256, 400)
            Me.MaximumSize = New System.Drawing.Size(272, 718)
            Me.MinimumSize = New System.Drawing.Size(272, 438)
            Me.Centrar()
        End Sub
    
        Private Const WM_SYSCOMMAND As Integer = &H112
        Private Const CS_MAXIMIZE As Integer = &HF030I
    
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            If m.Msg = WM_SYSCOMMAND Then
                If m.WParam = New IntPtr(CS_MAXIMIZE) Then
                    m.Result = IntPtr.Zero
                    Me.Size = Me.MaximumSize
                    Centrar()
                    Return
                End If
            End If
            MyBase.WndProc(m)
        End Sub
    
        Public Sub 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

    Cuando maximiza lo hace bien, pero cuando intentas restaurar no lo hace, que estaria mal en ese codigo o como se haria para poder restaurar al tamano minimo?

    Friday, December 14, 2012 3:43 AM

All replies

  • Céntralo a mano cambiando sus propiedades Left y Top. Puedes hacerlo en el evento Resize, que no sólo se dispara cuando el formulario cambia de tamaño, sino también cuando lo maximizas o minimizas. Dentro del evento, puedes usar la propieadad FormWindowState (si no recuerdo mal) para saber si está maximizado, y en caso afirmativo cambias el Me.Left y Me.Top a los valores adecuados para centrarlo.

    Thursday, December 13, 2012 6:27 PM
  • No me funciona he intentado pero igual me aparece en la misma pocision.
    Thursday, December 13, 2012 7:31 PM
  • este es mi codigo para inicializar el form que debo colocar para que al maximizar no me quede en la esquina superior izquierda.

    Public Class Form1
        Public Sub New()
            InitializeComponent()
            Me.StartPosition = FormStartPosition.CenterParent
            Me.MaximumSize = New Size(800, 600)
            Me.MinimumSize = New Size(600, 500)
        End Sub
    End Class
    

    Thursday, December 13, 2012 7:44 PM
  • Thursday, December 13, 2012 9:57 PM
  • Pero hay el usuario muestra su codigo final que le resulto...

    Public Class Form1
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.BackColor = System.Drawing.Color.Khaki
            Me.ClientSize = New System.Drawing.Size(256, 400)
            Me.MaximumSize = New System.Drawing.Size(272, 718)
            Me.MinimumSize = New System.Drawing.Size(272, 438)
            Me.Centrar()
        End Sub
    
        Private Const WM_SYSCOMMAND As Integer = &H112
        Private Const CS_MAXIMIZE As Integer = &HF030I
    
        Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
            If m.Msg = WM_SYSCOMMAND Then
                If m.WParam = New IntPtr(CS_MAXIMIZE) Then
                    m.Result = IntPtr.Zero
                    Me.Size = Me.MaximumSize
                    Centrar()
                    Return
                End If
            End If
            MyBase.WndProc(m)
        End Sub
    
        Public Sub 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

    Cuando maximiza lo hace bien, pero cuando intentas restaurar no lo hace, que estaria mal en ese codigo o como se haria para poder restaurar al tamano minimo?

    Friday, December 14, 2012 3:43 AM
  • mmmm... verifica cual Size se debe de aplicar al formulario... si actualmente tiene el Size = MaximumSize entonces el Size a aplicar sera el MinimumSize y viceverza.

    Salu2,


    Marvin E. Pineda

      ComboBoxMultiColumns

     NetBarControl

      TextEditor

    Friday, December 14, 2012 6:23 PM