2010-07-13 3 views
1

J'utilise cette méthode pour fermer des formulaires en fonction de leur Id, mais si j'ouvre un formulaire avec Id 2, fermez-le une fois, ça fonctionne bien, mais si j'ouvre un formulaire avec Id 2, il ne ferme pas le formulaire (le formulaire reste sur l'écran) Je n'ai aucune idée de ce qui se passe et j'ai désespérément besoin d'aide. Merci!La mise au rebut de la 2ème fois ne permet pas d'éliminer le formulaire?

public void OutsideClose(long Id) 
{ 
    if (InvokeRequired) 
    { 
     Invoke(new Action<long>(OutsideClose), Id); 
    } 
    else 
    { 
     var FormToClose = ListForms.Find(a=> a.Id == Id); 
     if(FormToClose != null) 
     { 
      FormToClose.Dispose(); 
      OpenForms.Remove(Id); 
     } 
    } 
} 
+2

Cela ne ressemble pas à un code valide - vous ressemblez vous supprimez le * ID * plutôt que la forme - et vous n'avez pas de point-virgule après l'appel Remove. S'il vous plaît fournir un programme court mais complet qui démontre le problème - il sera beaucoup plus facile de vous aider alors. –

+0

ajouté le point-virgule, désolé sur la mauvaise transcription, j'ai également édité le code parce que vous avez raison, il y a en fait 2 listes, ListForms contient des formulaires, OpenForms contient Id – sooprise

+0

Hey homme, vous avez posé fondamentalement la même question ici: http: //stackoverflow.com/questions/3233008/invoking-something-twice-leads-to-protected-override-void-dispose –

Répondre

1

Ok, je suis bête! Je disposais le formulaire, mais je ne le retirais pas de la liste. Maintenant, j'ai ajouté une ligne de code pour le faire et maintenant c'est corrigé.

Edit: Merci Jon pour me faire regarder de plus près le code (en particulier les deux listes)

Questions connexes