2011-03-26 54 views

回答

1

呼叫,當你想打開一個新的形式,這種方法:

private void CloseAllForms() 
{ 
    Form[] formToClose = null; 
    int i = 1; 
    foreach (Form form in Application.OpenForms) 
    { 
     if (form != this) //this is form1 
     { 
      Array.Resize(ref formToClose, i); 
      formToClose[i - 1] = form; 
      i++; 
     } 
    } 
    if (formToClose != null) 
     for (int j = 0; j < formToClose.Length; j++) 
      formToClose[j].Dispose(); 
} 

米蒂亞

+0

在那裏我必須寫上菜單項單擊事件的代碼???? – vivek 2011-03-26 12:41:49

+1

'Array.Resize'真的嗎?使用一個動態大小的容器,比如'List

'。 – Tergiver 2011-03-26 12:47:23

2

這裏是一個更簡潔,現代的,手術的方式來關閉所有MdiChild形式:

static void CloseAllMdiChildForms() 
{ 
    foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // ToArray necessary to build a snapshot 
     form.Close(); 
} 

但是,這聽起來像你想要的只是在任何給定的時間只有一個孩子的形式打開。如果是這樣,MDI不適合這項工作。您可以構建UserControl,然後將它們交換出主應用程序表單。

+0

看到我有一個管理員表單,並在這種形式的菜單項很多,並打開一個新的窗體。但打開一個新的,當我再次打開一個新的表格將打開,但舊的不會close.there許多形式打開管理員的形式。當我打開任何窗體時點擊一個菜單項,其他窗體應該接近。 – vivek 2011-03-26 13:18:46

+0

@vivek:我不清楚你的要求是什麼,但在菜單項的點擊處理程序中沒有什麼魔力。你必須編寫在那裏執行的代碼,所以你可以做任何你想要的。 – Tergiver 2011-03-26 13:24:04

0

這是最好的一個:

static void CloseAllMdiChildForms() 
{ 
    foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // The ToArray is necessary to build a snapshot 
    form.Close(); 
} 
相關問題