2009-04-11 7 views
7

Lorsque l'utilisateur clique sur certaines parties d'une fenêtre, j'ajoute un contrôle UserControl aux contrôles de la fenêtre. UserControl a un bouton de fermeture. Que puis-je faire dans le gestionnaire de boutons UserControl pour détruire UserControl? Il semble n'y avoir aucun .net analogique à l'appel Win32 DestroyWindow et il n'existe aucune méthode Close() pour un contrôle. Jusqu'à présent, j'ai ceci:Comment un UserControl peut-il se détruire?

private void sbClose_Click(object sender, EventArgs e) 
{ 
    Parent.Controls.Remove(this); 
    this.Dispose(); 
} 

Et, dans le cas où le parent doit détruire le contrôle, quelles sont les étapes? Voilà ce que j'ai jusqu'à présent:

Controls.Remove(control); 
    control.Dispose(); 

Répondre

6

Vous travaillez dans un environnement de code managé avec la collecte des ordures - il n'y a rien vous pouvez faire pour la force le contrôle utilisateur à détruire.

Tout ce que vous devez faire, tout ce que vous pouvez est de le retirer du parent et assurez-vous qu'il n'y a pas de références restantes.

Ce sera généralement suffisant:

private void sbClose_Click(object sender, EventArgs e) 
{ 
    Parent.Controls.Remove(this); 
} 

La seule fois où vous aurez besoin de plus est si vous attachez des choses ensemble avec des événements, que vous aurez besoin de désinscription ceux aussi bien.

+0

Non seulement contrôlé/géré lié. Des objets se détruisant eux-mêmes? amusement! –

0

Un contrôle ne peut pas se détruire lui-même. Pour ce qui est d'avoir un parent qui le fait, vous êtes sur la bonne voie. Vous pouvez avoir le parent ou un autre appel de contrôle Dispose sur lui et supprimer toutes les références à ce contrôle. Déréférencer le contrôle de cette façon permettra au GC de nettoyer les choses.

Questions connexes