(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();
cela fonctionnera-t-il la deuxième fois? je veux dire, faire la mise en œuvre plusieurs fois? – abramlimpin
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
@eibhrum: J'ai réorganisé cette réponse à la lumière de ce que fait le code. –