Disposer correctement/la fermeture d'un contrôle utilisateur
J'ai un Formulaire Windows de l'écran avec une barre de menu ancrée à gauche sur la forme, semblable à celle d'Outlook 2003, et un panneau de prendre le reste de la partie droite de la forme.
Mon menu de gauche contient des éléments.
En cliquant sur ces éléments, je veux charger appropriées de contrôle de l'utilisateur (agissant en tant que "sous-formulaires") sur le côté droit du panneau.
J'ai réussi à le faire et il fonctionne bien.
Le souci que j'ai, toutefois, est de savoir si ou non mon usercontrols sont éliminées correctement ou si elles restent en mémoire lorsque l'utilisateur clique sur un autre élément de menu (et en tant que tel, charge un autre usercontrol/sous-formulaire).
Le code est similaire à ceci:
private void ultraExplorerBar1_ItemClick(object sender, Infragistics.Win.UltraWinExplorerBar.ItemEventArgs e)
{
panel1.Controls.Clear();
if (e.Item.Key == "Action")
{
ActionUserControl subForm = new ActionUserControl();
panel1.Controls.Add(subForm);
subForm.Show();
}
else if (e.Item.Key == "Options")
{
OptionsUserControl subForm = new OptionsUserControl();
panel1.Controls.Add(subForm);
subForm.Show();
}
}
Je ne suis pas sûr si le panel1.Les contrôles.Clear() je vais appeler au début de la méthode est assez pour les usercontrols pas être utilisé plus d'être récupérées en temps en temps?
À ma connaissance, il ne devrait pas y avoir de référence à gauche dans l'application une fois désactivée dans le panneau, mais je ne suis pas sûr si je devrais être en train de faire quelque chose d'autre ou d'un raisonnablement léger outil que je pourrais utiliser pour confirmer que mon sous-formulaires sont éliminés comme il se doit et qu'il ne cause pas une sorte de mémoire/ressources fuite?
panel1.Controls.clear();
Il n'est pas, vous devez éliminer les contrôles du panneau de manière explicite. while (panel1.Les contrôles.Count > 0) panel1.Les témoins[0].Dispose();
OriginalL'auteur Kharlos Dominguez | 2011-11-02
Vous devez vous connecter pour publier un commentaire.
Utiliser cette boucle avant d'appeler
panel1.Controls.Clear()
et assurez-vous que leDispose()
méthode dans les contrôles de l'utilisateur à son tour de se débarrasser de tout jetable ressources.C'est un vieux post et dans VB.NET mais ce qui pose des choses assez proprement à l'égard de l'élimination standard WinForms des contrôles. vbinfozine.com/a_disposable_comp.shtml
OriginalL'auteur harlam357
Un pour chaque boucle ne sera pas faire le travail. Car après chaque disposer les éléments et les indices sont modifiées.
Vous avez besoin d'une boucle while de disposer du plus haut contrôle à chaque fois.
Dans le code suivant que j'utilise, j'ai un panneau de commandes de l'utilisateur en elle.
Je vais dans la première de contrôler et de disposer de ses contrôles, puis jeter le contrôle de lui-même.
Après l'élimination de tous les contrôles de déclenchement d'un clear pour réinitialiser l'index.
OriginalL'auteur Hussam Kazah
Je le fais assez de contenu dynamique que j'ai ajouté cette méthode pour mon base-classe de la page:
C'est récursive trop. Et puis l'appeler comme (si vous n'avez pas le contrôle de vous-même):
ou
OriginalL'auteur n8wrl