2013-06-21 5 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

부모 양식이 열린 하위 양식을 닫으려고한다고 가정하면 Application.OpenForms :

대신 this.OwnedForms을 사용해야합니다.
foreach (var form in this.OwnedForms) 
{ 
    form.Close(); 
} 
1

문제는 반복하는 컨테이너의 요소에 Close을 호출하는 것입니다. 이 컨테이너는 열린 양식 만 포함하므로 Close 메서드를 호출 할 때 컨테이너에서 양식이 제거되므로 반복 중에 컨테이너가 변경됩니다. C#은 이것을 좋아하지 않습니다.

는이 문제를 해결 컨테이너의 복사본을 생성하고이 복사본을 반복하려면 : 이것은 단지 문제의 C 번호 부분에 응답하는 것이

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

참고. 다른 응답자는 잘못된 수집을 반복적으로 반복한다고 제안했습니다. 필자는 WinForms에 익숙하지 않으므로 이에 대해 언급 할 수는 없지만 살펴보기를 원할 수 있습니다.