2012-01-15 13 views
8

¿Cómo sería posible generar un nuevo formulario, p. Form2 de Form1, pero asegúrese de Form2 es adyacente a Form1, por ejemplo:Mostrar otro formulario adyacente al que se generó de C#

enter image description here

+3

las formas tienen un [ 'propiedad Location'] (http://msdn.microsoft.com/en-us/library/ms159414.aspx). ¿Eso ayuda? –

+0

@Cody Gray Sí, lo hace gracias – Mike

Respuesta

4

Pruebe a manejar el evento LocationChanged del formulario principal.

demostración simple:

public partial class Form1 : Form { 
    Form2 f2; 

    public Form1() { 
    InitializeComponent(); 
    this.LocationChanged += new EventHandler(Form1_LocationChanged); 
    } 

    private void button1_Click(object sender, EventArgs e) { 
    f2 = new Form2(); 
    f2.StartPosition = FormStartPosition.Manual; 
    f2.Location = new Point(this.Right, this.Top); 
    f2.Height = this.Height; 
    f2.Show(); 
    } 

    void Form1_LocationChanged(object sender, EventArgs e) { 
    if (f2 != null) 
     f2.Location = new Point(this.Right, this.Top); 
    } 
} 
6

Algo así como:

// button click handler method 

Form2 child = new Form2(); 
child.Location = new Point(this.Location.X + this.Width, 
          this.location.Y); 
child.Show(); 

Tome la coordenada X de la ubicación del objeto de formato actual y añadir a es el ancho de la forma, obteniendo así la coordenada X de la nueva forma. La coordenada Y se mantiene igual.

+0

Gracias, pero supongo que la ventana no "permanecerá pegada" a la otra ventana/formulario? – Mike

+0

No, no se pegará –

+1

@Mike: No especificó este requisito. – Tudor

3
public partial class Form1 : Form 
{ 
    Form2 frm2; 
    public Form1() 
    { 
     InitializeComponent(); 
     frm2 = new Form2(this); 
     frm2.Show(); 
    } 
} 

Y:

public partial class Form2 : Form 
{ 
    Form1 frm1; 
    public Form2(Form1 frm1) 
    { 
     InitializeComponent(); 
     this.frm1 = frm1; 
     frm1.Move += new EventHandler(Form1_Move); 
    } 

    void Form1_Move(object sender, EventArgs e) 
    { 
     this.Location = new Point(frm1.Location.X + frm1.Width, frm1.Location.Y); 
    } 
} 

EDIT: (Debido a un comentario)

Para hacer Form1 siguen Form2 así, añadir:

Move += new EventHandler(Form2_Move); 

Para Form2 's constructor .

Y:

void Form2_Move(object sender, EventArgs e) 
{ 
    frm1.Location = new Point(Location.X - frm1.Width, Location.Y); 
} 

En su clase.

+0

¿Qué pasa si se mueve la Forma 2? – Groo

+0

@Groo Gracias. Editado en consecuencia. – ispiro

3

Tal vez esto le ayudará. Button1 en Form1 es

private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 form2 = new Form2(); 
      form2.StartPosition = FormStartPosition.Manual; 
      form2.SetDesktopLocation(this.Location.X + this.Width, this.Location.Y); 
      form2.ShowDialog(); 
     } 
Cuestiones relacionadas