Disposant d'un formulaire de formulaire parent en C#?
J'ai un formulaire qui va ouvrir un nouveau formulaire lorsque d'un seul bouton (form1button) est cliqué. Et sur le formulaire d'enfant, il y aura un autre bouton 'form2button'. Maintenant, si je clique sur ce form2button la nouvelle form2 doivent être éliminés. Mais parce que la form2 objet est créé ici dans la classe form1 méthode, je ne peut pas disposer de cet objet dans form2 méthode de classe (fom2buttonclick). J'ai donc utilisé de l'électricité statique à mon travail comme dans l'exemple suivant pseudo code.
Form1:
class Form1 : Form
{
static Form2 f2;
public void Form1_buttonclick(object sender, EventArgs e)
{
f2 = new Form2();
}
public void Disposef2()
{
f2.Dispose();
}
}
Form2:
class Form2 : Form
{
public void Form2_buttonclick(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.Disposef2();
}
}
Est-il un autre de meilleure façon de le faire. Ou C# la conception elle-même n'est pas de fournir un mécanisme de remplacement. Je suis nouveau en C#.Merci de m'aider..
Modifier
Je veux fermer (dispose explicitement) form2 objet qui est créé dans la classe form1 lorsque le bouton sur form2 est cliqué. Cette édition est pour donner plus de clarté.
Je ne comprends pas pourquoi vous voulez vous Débarrasser form2 à tous, pourriez-vous préciser le "Pourquoi" derrière lui afin que nous puissions vous aider à mieux?
Je suis en train de montrer une image sur form2 lorsque le bouton à form1 est cliqué et je suis disposer que form2 quand un bouton sur form2 est cliqué.
OriginalL'auteur Enjoy coding | 2009-04-06
Vous devez vous connecter pour publier un commentaire.
Si les deux formes n'ont pas de parent-boîte de dialogue type de relation, vous pourriez juste voulez accrocher dans l'Éliminés de l'événement sur le sous-formulaire pour être averti quand il se ferme.
Puis tout ce que vous avez à faire dans Form2 est simplement pour le fermer:
OriginalL'auteur Lasse Vågsæther Karlsen
MSDN docs sur l'élimination des formes:
Source
À la clôture vs élimination:
La deuxième partie de la réponse est basée sur une vieille version du framework. Toute personne intéressée par la version mise à jour de la Clôture de la Manifestation doit regarder ici : msdn.microsoft.com/en-us/library/...
OriginalL'auteur Igor Brejc
Vous n'êtes pas vraiment un lecteur de droite? Beaucoup de réponses ici déjà.
Si vous utilisez ShowDialog puis form2 retourne lorsque vous appelez close(). Ainsi, dans Form1:
Et ensuite appeler Close() dans form2.
OriginalL'auteur RvdK
Vous n'avez pas besoin d'appeler explicitement les Disposer sur la forme, le garbage collector ne sera que pour vous.
Si vous voulez quelque chose de spécifique pour se produire lors de la Form2 "s'en va", vous pouvez le brancher dans une forme de clôture de l'événement.
EDIT :
Sur Form2, dans la clic de bouton, essayez
Qui clôturera cette instance de form2 (la forme disparaît). Si form1 a encore une référence à la form2, puis form2 ne seront pas ramassés par le garbage collector, et que le GC ne sera pas en disposer.
Si il y a une raison pour form1 pour conserver une référence à form2 ?
Si oui, form1 doit gérer from2 de clôture de l'événement, puis form1 peut les libérer de la référence à form2 (null).
Maintenant le GC de ramassage form2 en tant que candidat pour être recueillies, il sera (peut-être plus que d'une seule étape) appeler la méthode dispose, et de libérer Form2 mémoire.
Si vous intervenez dans son proche de l'événement, qui crée un gestionnaire d'événement que vous devez l'enlever aussi bien correct? soupir sont des fuites de mémoire une telle douleur.
OriginalL'auteur Binary Worrier
Je l'ai fait une fois pour mon projet, pour fermer une application, et d'en ouvrir une autre application.
Et ajoutez la Méthode suivante. Votre newThread.Commencer à s'appeler cette méthode.
OriginalL'auteur franklins