2016-05-06 7 views
0

Hatte fest für eine ganze Weile hier ähnliche Beiträge lesen, ich habe eine Lösung gefunden, aber es war in Dummy-Code und ich weiß einfach nicht, was ich falsch mache.Wenn Form1 lädt, verstecken Sie es und zeigen Sie Form2

Ich habe 2 Formulare, wenn die Hauptform Lasten bis ich es ausblenden möchten und zeigen form2 (das Login-Formular)

Code sieht wie folgt aus.

Aber wenn ich das Programm ausführen, sind beide Formulare offen und sichtbar.

Was mache ich falsch? Sollte das Hauptformular nicht versteckt sein?

Antwort

1

Die Methode Hide hat keinen Effekt vom Load Ereignis, da noch kein Handle erstellt wurde.

Sie haben zwei Möglichkeiten:

  • Mit dem Shown Ereignisse (oder besser gesagt, das HandleCreated Ereignis) und es verstecken, wenn eine Bedingung (wie ein Variable 'Anmeldeformular nicht dargestellt) erfüllt ist

  • Zeigen Sie das Anmeldeformular als Startformular an und öffnen Sie das Hauptformular. Sie können dies durch passing an ApplicationContext around and pass on control to the main form tun.

+0

Alternativ könnte man hinzufügen ein Handler für das Ereignis 'HandleCreated' . –

+0

Ja, das ist ein besserer. @ BarryO'Kane Dachte nicht daran. –

0

Sie können es mit Hilfe von eigentümer tun, hier arbeitet Beispiel

Haupt Form

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

    private void Form1_Load(object sender, EventArgs e) 
    { 
     var loginFormMax = new LoginFormMax { Owner = this };//save main form as owner inside child form 
     loginFormMax.Show(); 
    } 
} 

Child Form

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

    private void LoginFormMax_Shown(object sender, EventArgs e) 
    { 
     var owner = this.Owner; 
     owner.Hide();//now you have control over owner form, just hide it 
    } 

    private void LoginFormMax_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     var owner = this.Owner; 
     owner.Show();//now you have control over owner form, just show it again 
    } 
}