2010-07-12 69 views
0

比方說,我在下面的方式打開窗體:關閉特定的WinForm?

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

在我的代碼,有一個可能性,許多FormSomething的是開放一次。如何關閉FormSomething的特定實例?

FormSomething的每個實例都有一個與其關聯的Id。

編輯:我想我真的想得到的是能夠外部關閉FormSomething的特定實例。

我真的很感激任何提示! :D

回答

3

您可以調用Form類的Close方法。

聽起來像是你只需要保持的已打開的窗體列表,以便您可以稍後再引用它們:

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

是的,但它可能是更合理的使用字典這個... – 2010-07-12 20:40:57

+0

一個小點的'Remove'會更好的'如果裏面(!=形式無效)'測試。 – ChrisF 2010-07-12 20:41:18

+0

Gah!兩個重點。我多麼愚蠢。 – 2010-07-12 20:56:14

2

只是跟蹤它們。字典是自然的收集對象。例如:

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(); 
     } 
    }