2010-04-23 2 views

Répondre

3

(Aux fins de cette réponse, Form1 et Form2 représentent des classes héritant de Windows.Window)

Je recommande l'une des approches suivantes

Approche 1: Garder Form2 vivant et capable de montrer à nouveau

Dans ce cas, vous aurez besoin de faire une variable d'instance sur Form1:

private Form2 form2; 

Dans votre code à "switch" à Form2, faites ceci:

if(form2 == null) 
{ 
    form2 = new Form2(); 

    DependencyPropertyDescriptor.FromProperty(Window.VisibilityProperty, 
      typeof(Window)).AddValueChanged(form2, Form2_VisibilityChanged); 
} 

Hide(); 

form2.Show(); 

ajouter ensuite cette fonction Form1:

private void Form2_VisiblityChanged(object sender, EventArgs e) 
{ 
    if(form2.Visility == Visibility.Hidden) Show(); 
} 

Maintenant, tout ce que vous devez faire est d'appeler Hide(); au sein Form2 pour le faire revenir à Form1.

Approche 2: Fermeture Form2 et l'ouverture d'une nouvelle instance à chaque fois

Ceci est un peu plus facile et plus en ligne avec ce que vous avez:

Form2 form2 = new Form2(); 

form2.Closed += Form2_Closed; 

Hide(); 

form2.Show(); 

De même, ajoutez cette fonction Form1:

private void Form2_Closed(object sender, EventArgs e) 
{ 
    Show(); 
} 

maintenant, au lieu d'appeler Hide(); en Form2, appelez Close();

+0

cela fonctionnera-t-il la deuxième fois? je veux dire, faire la mise en œuvre plusieurs fois? – abramlimpin

+0

Une erreur s'est produite: la référence d'objet n'est pas définie sur une instance d'un objet. > Form1.Show(); – abramlimpin

+1

@eibhrum: J'ai réorganisé cette réponse à la lumière de ce que fait le code. –

1

La propriété Visiblity d'un Window peut être définie sur Hidden pour le masquer. Donc, si vous êtes Window1:

this.Visibility = Visibility.Hidden; 
Window2 win = new Window2(); 
win.Show(); 

Pour afficher à nouveau la fenêtre, il suffit de changer son Visibility.

Questions connexes