2013-06-21 121 views
2

我有一個Windows應用程序,其中我想要一個註銷功能。我不希望註銷將應用程序投入登錄頁面,因爲我沒有登錄頁面。登錄只是主頁面上的一個面板。註銷功能拋出錯誤C#winform

我曾嘗試下面的代碼,但它拋出這個錯誤:

error:Collection was modified enumeration operation may not execute.

private void mnulogout_Click(object sender, EventArgs e) 
     { 
      DialogResult dialogresult=MessageBox.Show("Do You Want To LogOut?","LogOut",MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      if (dialogresult == DialogResult.Yes) 
      { 
       foreach (Form fm in Application.OpenForms) 
       { 
        fm.Close(); 
       } 
      } 
     } 
+0

你試圖顯示一個面板上點擊註銷? – Karthik

+0

是的,我想展示面板。 – tushar7

回答

0

,如果你想顯示/隱藏面板是相同的形式,你可以使用這個

private void mnulogout_Click(object sender, EventArgs e) 
     { 
      DialogResult dialogresult=MessageBox.Show("Do You Want To LogOut?","LogOut",MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      if (dialogresult == DialogResult.Yes) 
      {      
       loginPanel.Visible = true; 
       OtherPanels.Visible = false; 
      } 
     } 
0

假設您試圖關閉任何子窗體父窗體可能已經打開,您應該使用this.OwnedForms而不是Application.OpenForms

foreach (var form in this.OwnedForms) 
{ 
    form.Close(); 
} 
1

問題是您正在迭代容器的元素上調用Close。由於此容器僅包含開放表單,因此在調用Close方法時將從容器中刪除表單,因此您在迭代過程中正在更改容器。 C#不喜歡這樣。

爲了解決這個問題,創建容器的副本,並遍歷這個副本:

List openFormsCopy = new List(Application.OpenForms); 
foreach (Form fm in openFormsCopy) 
{ 
    fm.Close(); 
} 

請注意,這只是回答你的問題的C#部分。無論如何,其他一些答覆者建議您正在迭代錯誤的集合。我對WinForms不熟悉,所以我不能對此發表評論,但您可能需要查看它。