2010-07-12 11 views
0

Disons que j'ouvre une forme de la manière suivante:Fermeture d'un formulaire WinForm spécifique?

FormSomething FormSomething = new FormSomething(SomethingId); 
FormSomething.Show(); 

Dans mon code, il y a une possibilité pour beaucoup FormSomething de être ouvert à la fois. Comment fermer une instance spécifique d'un formulaire?

Chaque instance de FormSomething est associée à un ID.

Éditer: Je suppose que ce que je cherche vraiment à faire est de pouvoir fermer une instance spécifique de quelque chose.

J'apprécierais vraiment tous les conseils! : D

Répondre

3

Il existe une méthode Close sur la classe Form que vous pouvez appeler.

On dirait que vous avez juste besoin de garder une liste des formes que vous avez ouvert pour que vous puissiez les consulter ultérieurement:

List<FormSomthing> _SomethingForms = new List<FormSomething>(); 

    void DisplaySomething() 
    { 
     FormSomething FormSomething = new FormSomething(SomethingId); 
     _SomethingForms.Add(FormSomething); 
     FormSomething.Show(); 
    } 

    void CloseThatSucka(int somethingId) 
    { 
     // You might as well use a Dictionary instead of a List (unless you just hate dictionaries...) 
     var form = _SomethingForms.Find(frm => frm.SomethingId == somethingId); 
     if(form != null) 
     { 
      form.Close(); 
      _SomethingForms.Remove(form); 
     } 
    } 
+0

Ouais, mais il pourrait être plus logique d'utiliser un dictionnaire pour cette ... –

+0

Un point mineur, le 'Remove' serait mieux à l'intérieur du' if (! Form = null) ' tester. – ChrisF

+0

Gah! les deux grands points. C'est idiot de ma part. –

2

Il suffit de garder la trace. Un dictionnaire est l'objet de collection naturel. Par exemple:

Dictionary<int, Form2> instances = new Dictionary<int, Form2>(); 

    public void OpenForm(int id) { 
     if (instances.ContainsKey(id)) { 
      var frm = instances[id]; 
      frm.WindowState = FormWindowState.Normal; 
      frm.Focus(); 
     } 
     else { 
      var frm = new Form2(id); 
      instances.Add(id, frm); 
      frm.FormClosed += delegate { instances.Remove(id); }; 
      frm.Show(); 
     } 
    } 
Questions connexes