2011-03-22 3 views
0

J'ai une forme principale à partir de laquelle je génère plusieurs sous-formulaires. Je stocke ces formes dans une variable List<Subform^> ^ afin que je puisse leur envoyer des messages à partir du formulaire principal. Je charge de nouvelles formes comme celle-ci (de la mémoire, peut-être pas compiler):Communication entre formulaires

Subform ^sf = gcnew Subform(some, variables, here); 
subforms->Add(sf); 
subforms[subforms.Count-1]->Show(); 

Mon but est de supprimer le sous-formulaire de la liste une fois qu'il est fermé. J'ai envisage de passer à un dictionnaire pour l'identification de forme simple, comme ceci:

++i; // Some sort of a form counter. to access them when closing. 
Subform ^sf = gcnew Subform(some, variables, here); 
subforms->Add(i, sf); 
subforms[i]->Show(); 

Comment pourrais-je supprimer le formulaire ieme lors de la fermeture? Peut-être quelque chose comme ceci (en pseudocode)

sf->FormClosed = subforms->RemoveAt[i]; // Before I add it to the dictionary. 

?

+0

Vous pouvez toujours utiliser une liste au lieu d'un dictionnaire. Mais vous devrez parcourir la liste pour trouver le formulaire que vous voulez supprimer. –

Répondre

1

Essayez quelque chose comme:

sf->FormClosed += gcnew FormClosedEventHandler(this, &RemoveSubform); 

void RemoveSubform(System::Object^ sender, FormClosedEventArgs^ e) 
{ 
    subforms->Remove(sender); 
}