Como abrir un form al lado izquierdo de otro form?

Iniciado por _CrisiS_, 31 Diciembre 2017, 04:49 AM

0 Miembros y 1 Visitante están viendo este tema.

_CrisiS_

Tengo un form principal y quiero abrir un form secundario pero que este abra al costado izquierdo del principal como podría hacerlo?

Gracias

Eleкtro

#1
Cita de: _CrisiS_ en 31 Diciembre 2017, 04:49 AM
Tengo un form principal y quiero abrir un form secundario pero que este abra al costado izquierdo del principal como podría hacerlo?

¿Solamente quieres que el Form secundario se muestre pegado al borde izquierdo del Form prinncipal, o además quieres mantenerlo pegado "para siempre"?.

En el primer caso:
Código (vbnet) [Seleccionar]
Public Class Form1

   Private srcForm As Form = Me
   Private dstForm As Form = Form2

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Me.dstForm.StartPosition = FormStartPosition.Manual
       Me.dstForm.Location = New Point((Me.srcForm.Location.X - Me.dstForm.Width), Me.srcForm.Location.Y)
       Me.dstForm.Show()
   End Sub

End Class


En el segundo caso:
Código (vbnet) [Seleccionar]
Public Class Form1

   Private srcForm As Form = Me
   Private dstForm As Form = Form2
   Friend Shared dockedFormIsMoving As Boolean

   Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Me.dstForm.Owner = Me.srcForm
       Me.dstForm.StartPosition = FormStartPosition.Manual
       Me.dstForm.Location = New Point((Me.srcForm.Location.X - Me.dstForm.Width), Me.srcForm.Location.Y)
       Me.dstForm.Show()
   End Sub

   Private Sub Form1_Move(sender As Object, e As EventArgs) Handles MyBase.Move
       If Not (dockedFormIsMoving) Then
           Me.dstForm.Location = New Point((Me.srcForm.Location.X - Me.dstForm.Width), Me.srcForm.Location.Y)
       End If
   End Sub

End Class


Código (vbnet) [Seleccionar]
Public Class Form2

   Private Sub Form2_Move(sender As Object, e As EventArgs) Handles MyBase.Move
       If (Me.Owner IsNot Nothing) Then
           Form1.dockedFormisMoving = True
           Me.Owner.Location = New Point((Me.Location.X + Me.Width), Me.Location.Y)
           Form1.dockedFormisMoving = False
       End If
   End Sub

End Class


PD: si quieres una solución más sofisticada (te aviso, son miles de lineas, con varias enumeraciones y tipos ntivos, pero sería copiar y pegar lo que te muestre, luego es bien facil de usar), pidemelo y te mostraré un sistema de docking de ventanas ( IWin32Window ) con varias funcionalidades adicionales que implementé en mi framework comercial ElektroKit.

Saludos.