Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: _CrisiS_ en 31 Diciembre 2017, 04:49 am



Título: Como abrir un form al lado izquierdo de otro form?
Publicado por: _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?

Gracias


Título: Re: Como abrir un form al lado izquierdo de otro form?
Publicado por: Eleкtro en 31 Diciembre 2017, 11:04 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
  1. Public Class Form1
  2.  
  3.    Private srcForm As Form = Me
  4.    Private dstForm As Form = Form2
  5.  
  6.    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  7.        Me.dstForm.StartPosition = FormStartPosition.Manual
  8.        Me.dstForm.Location = New Point((Me.srcForm.Location.X - Me.dstForm.Width), Me.srcForm.Location.Y)
  9.        Me.dstForm.Show()
  10.    End Sub
  11.  
  12. End Class
  13.  

En el segundo caso:
Código
  1. Public Class Form1
  2.  
  3.    Private srcForm As Form = Me
  4.    Private dstForm As Form = Form2
  5.    Friend Shared dockedFormIsMoving As Boolean
  6.  
  7.    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  8.        Me.dstForm.Owner = Me.srcForm
  9.        Me.dstForm.StartPosition = FormStartPosition.Manual
  10.        Me.dstForm.Location = New Point((Me.srcForm.Location.X - Me.dstForm.Width), Me.srcForm.Location.Y)
  11.        Me.dstForm.Show()
  12.    End Sub
  13.  
  14.    Private Sub Form1_Move(sender As Object, e As EventArgs) Handles MyBase.Move
  15.        If Not (dockedFormIsMoving) Then
  16.            Me.dstForm.Location = New Point((Me.srcForm.Location.X - Me.dstForm.Width), Me.srcForm.Location.Y)
  17.        End If
  18.    End Sub
  19.  
  20. End Class

Código
  1. Public Class Form2
  2.  
  3.    Private Sub Form2_Move(sender As Object, e As EventArgs) Handles MyBase.Move
  4.        If (Me.Owner IsNot Nothing) Then
  5.            Form1.dockedFormisMoving = True
  6.            Me.Owner.Location = New Point((Me.Location.X + Me.Width), Me.Location.Y)
  7.            Form1.dockedFormisMoving = False
  8.        End If
  9.    End Sub
  10.  
  11. 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.