C# - Comment faire de deux formes font référence les uns aux autres
Je suis en train d'écrire un WindowsForms application en MS Visual C#, et j'ai besoin de deux formes afin de pouvoir référencer les uns des autres. Comme je l'ai tester, j'ai créé deux boutons sur Form1 -- un bouton qui affiche Form2 et un autre bouton que le masque (le code est ci-dessous).
Je veux faire la même chose pour le Formulaire2 -- créer deux boutons de cacher ou d'afficher Form1. J'ai utilisé la même méthode que j'ai utilisée pour Form1, mais quand je compile l'application, il semble être pris dans une boucle infinie et je reçois un StackOverflow message.
Comment puis-je changer le code de sorte que les deux formes sont en mesure de référencer les uns des autres?
De code de Form1:
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Form2 frm2;
public Form1()
{
InitializeComponent();
frm2 = new Form2();
}
private void button1_Click(object sender, EventArgs e)
{
frm2.Visible = false;
}
private void button2_Click(object sender, EventArgs e)
{
frm2.Visible = true;
}
}
}
Form2 code:
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
Form1 frm1;
public Form2()
{
InitializeComponent();
frm1 = new Form1();
}
private void button1_Click(object sender, EventArgs e)
{
frm1.Visible = false;
}
private void button2_Click(object sender, EventArgs e)
{
frm1.Visible = true;
}
}
}
La Form1 et Form2 constructeurs appellent les uns les autres dans une boucle infinie.
OriginalL'auteur andrewl85 | 2011-09-01
Vous devez vous connecter pour publier un commentaire.
Forms2 du code doit être
Même si les deux parlent les uns aux autres, un seul doit d'abord être créé et transmis à la seconde.
Form1 devront être tweeked à
L'autre façon de faire est de créer à la fois et de passer après la construction
OriginalL'auteur Scott Chamberlain
"Autre forme" doit être donné à l'instance appropriée. Quelque chose comme cela devrait aider.
OriginalL'auteur Austin Salonen
Vous êtes en train de créer une nouvelle instance de chaque formulaire que vous créez l'autre forme.
Au lieu de cela, vous devriez prendre l'une des formes que prennent une instance de sa mère formulaire en tant que paramètre.
OriginalL'auteur SLaks
Lorsque vous créez une instance de Form2 sur le frm1 objet, cette nouvelle instance crée un autre Form1 exemple, qui crée une nouvelle Forme 2 exemple, que...
Voyez-vous la boucle infinie?
Créer une instance de chaque autre sur la classe principale ou en tant que global des variables d'application. Ou de les passer en paramètre les uns aux autres. L' .NET framework sera juste référence sans alocating un nouvel espace mémoire.
OriginalL'auteur programad
OriginalL'auteur blthiewes
Avoir un médiateur (Définition de Wikipedia) entre les deux.
Ceci est un exemple de mise en œuvre en C#.
OriginalL'auteur Icarus