2010-06-30 32 views
5

Así que básicamente quiero que el usuario inicie sesión primero para usar el otro formulario. Sin embargo, mi dilema es que el cuadro de inicio de sesión está en Form2, y el formulario principal es Form1.Me gustaría controlar Form1 desde Form2

if ((struseremail.Equals(username)) && (strpasswd.Equals(password))) 
{ 
    MessageBox.Show("Logged in"); 
    form1.Visible = true; 
    form1.WindowState = FormWindowState.Maximized; 
} 
else 
{ 
    MessageBox.Show("Wow, how did you screw this one up?"); 
} 

Sin embargo, Form1 no se hace visible, (ya que la lanzo como visble = falso) después de que inicien sesión. Puede alguien ayudar?

EDIT:

brillante respuesta, pero mi problema es todavía aquí. Básicamente, quiero cargar Form2 primero, (que es fácil, ejecuto Form1 y configúrelo para ocultarlo). Pero cuando se cierra Form2, también quiero que se cierre el Form1.

private void Form2_FormClosing(Object sender, FormClosingEventArgs e) 
{ 
    Form1 form1 = new Form1(); 
    form1.Close(); 
    MessageBox.Show("Closing"); 
} 

esto no parece funcionar ...

+0

edité mi respuesta para cerrar form1 cuando form2 está cerrado. llama a 'form1.Close()' en el evento 'Form2_closed'. –

Respuesta

10

Tendrá que pasar la referencia de una forma a otra, de modo que pueda ser utilizado en la otra forma. Aquí he dado un ejemplo de cómo dos formas diferentes pueden comunicarse entre sí. Este ejemplo modifica el texto de una etiqueta en una forma de otra forma.

Download Link for Sample Project

// Su Form1

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 frm = new Form2(this); 
     frm.Show(); 
    } 

    public string LabelText 
    { 
     get { return Lbl.Text; } 
     set { Lbl.Text = value; } 
    } 
} 

// Su Form2

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private Form1 mainForm = null; 
    public Form2(Form callingForm) 
    { 
     mainForm = callingForm as Form1; 
     InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     this.mainForm.LabelText = txtMessage.Text; 
    } 

    //Added later, closing Form1 when Form2 is closed. 
    private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     mainForm.Close(); 
    } 
} 

alt text http://demo.ruchitsurati.net/files/frm1.png

alt text http://demo.ruchitsurati.net/files/frm2.png

+0

Gracias por su respuesta brillante. Consulte mi pregunta actualizada ... –

+0

Enganche form2.Closed evento de form1 y cierre form1 cuando se invoca. – jgauffin

0

Al iniciar sesión y hacer Form1.visible = true; tienen también trató Form1.Show(); que debe mostrar Form2

Sin embargo, personalmente, preferiría el establecimiento de la aplicación se ejecute form2 directamente en el archivo program.cs.

static void Main() 
{ 
    Application.Run(new Form2()); 
} 

continuación, cuando el usuario inicia una sesión con éxito en, hacer

cuenta que, en Form2, cuando/después de crear una instancia de Form1, es posible que desee añadir también esto:

newform1.FormClosed += delegate(System.Object o, FormClosedEventArgs earg) 
       { this.Close(); }; 

esto cierra form2 cuando form1 está cerrado

mejor aún, haga form1.Show() en un nuevo hilo, y luego this.Close(); para form2. esto elimina la necesidad de agregar al evento FormClosed de form2: puede cerrar form2 inmediatamente después de iniciar form1 en un nuevo hilo. Pero trabajar con hilos puede ser un poco complicado.

EDITAR: form2 es el padre de form1. si form2 es su formulario de solicitud principal, cerrarlo cierra su programa (generalmente). Por lo tanto, desea ocultar y deshabilitar form2 y cerrarlo solo después de cerrar form1 o iniciar form1 en un nuevo subproceso.Su edición prácticamente abre el formulario 1, luego lo cierra inmediatamente.

Cuestiones relacionadas