2010-06-30 15 views
5

steuern Ich möchte im Grunde der Benutzer zuerst anmelden, um die andere Form zu verwenden. Mein Dilemma ist jedoch, dass sich die Login-Box in Form2 und das Hauptformular in Form1 befindet.Ich möchte Form1 von 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?"); 
} 

Allerdings ist Form1 nicht sichtbar werden, (da ich es als visble = false starten), nachdem sie sich anmelden. Kann mir jemand helfen?

EDIT:

Brilliant Antwort, aber mein Problem ist immer noch da. Ich möchte grundsätzlich Form2 zuerst laden (was einfach ist, ich führe Form1 und setze es zu verstecken) Aber wenn Form2 geschlossen ist, möchte ich auch Form1 geschlossen werden.

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

dies scheint nicht zu arbeiten ...

+0

meine Antwort bearbeitet, um Form1 zu schließen, wenn Form2 geschlossen ist. Rufen Sie 'form1.Close()' auf 'Form2_closed' Ereignis auf. –

Antwort

10

Sie das Referenz von einer Form zur anderen übergeben müssen, so dass es in der anderen Form verwendet werden kann. Hier habe ich ein Beispiel dafür gegeben, wie zwei verschiedene Formen miteinander kommunizieren können. In diesem Beispiel wird der Text eines Labels in einem Formular von einem anderen Formular geändert.

Download Link for Sample Project

// Ihr 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; } 
    } 
} 

// Ihr 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

Vielen Dank für Ihre brillante Antwort.Bitte sehen Sie meine aktualisierte Frage ... –

+0

Haken Sie das form2.Closed Ereignis von form1 und schließen Sie form1, wenn es aufgerufen wird. – jgauffin

0

Wenn Sie sich anmelden und tun Form1.visible = true; haben Sie versucht auch Form1.Show(); die form2

jedoch zeigen sollte, persönlich würde ich es vorziehen, die Anwendung Einstellung form2 direkt in der program.cs Datei auszuführen.

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

dann, wenn der Benutzer erfolgreich anmeldet, tun

Geist Sie, in form2, wenn/nach form1 instanziiert, können Sie auch diese hinzufügen:

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

Dies schließt Form2, wenn Form1 geschlossen ist

besser noch tun form1.Show() in einem neuen Thread, und dann this.Close(); für form2. Dadurch entfällt das Hinzufügen zu dem Ereignis FormClosed von form2: Sie können also form2 unmittelbar nach dem Start von form1 in einem neuen Thread schließen. Aber die Arbeit mit Threads könnte etwas kompliziert werden.

EDIT: form2 ist form1 Elternteil. Wenn form2 Ihr Hauptantragsformular ist, schließt das Schließen Ihres Programms (allgemein). Daher möchten Sie entweder form2 einfach ausblenden und deaktivieren und es erst schließen, nachdem form1 geschlossen wurde, oder form1 in einem neuen Thread starten.Ihre Bearbeitung öffnet Form1 so gut, dass sie sofort geschlossen wird.

Verwandte Themen