2013-08-30 4 views
1

pos 소프트웨어를 설계했습니다. 여기에는 3 개의 양식 중 하나의 로그인 양식, pos_authority 양식, pos_user 양식이 있습니다. pos_authority 및 pos_user 사용자 양식에는 로그 아웃 버튼이 있습니다 내가 양식에서 로그 아웃하고 난 로그인 form.here이기본 양식에서 로그 아웃하고 C# .NET에서 로그인 양식을 표시하십시오.

private void blogout_button_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      foreach (Form f in Application.OpenForms) 
      { 
       if (f.Name != "login_form") 
       { 
        f.Close(); 
        new login_Form().Show(); 
       } 
      } 
     } 

     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
여기

컬렉션이 수정 된 예외를 보여 내 코드입니다 숨길 로그인 form.when 로그인을 보여주고 싶은하려는 버튼을 클릭 .when; 열거 연산이 실행되지 않을 수 있습니다.

답변

2

Application.OpenForms는 런타임에 열려있는 모든 양식을 가져 오지만 열려있는 양식을 닫으면 (즉, OpenForm에서 양식을 제거하면) foreach 문은 모음이 변경되었음을 예외로합니다. .

Application.OpenForms.Cast<Form>().ToList() 

또는 라운드 컬렉션을 다른 방법으로 통과 - 마지막에서 대신 첫째로 :

는 목록에 오픈 형태를 저장할 수 이러한 종류의 문제에 대한 해결 방법입니다.

편집 :

이 당신의 foreach (Form f in Application.OpenForms)foreach (Form f in Application.OpenForms.Cast<Form>().ToList())와, 내가 그것을 테스트하지 않았다 대체하지만 이론적으로 작동합니다 예외 없애.

하지만 예외를 수정하더라도 제대로 작동하지 않을 것이라고 생각합니다. 두 개 이상의 열린 양식이있는 경우 많은 로그인 양식이 표시됩니다. 나는 당신이 전체 디자인을 검토하고 이벤트를 사용하려고 시도하는 것을 제안합니다 - 당신은 윈도우 폼이 이벤트 구동된다는 것을 알고 있습니다!

+0

나는이 @REX.i를 구현하는데 적절한 해결책을 얻지 못한다. – mahfuz110244

+0

예외를 없애기 위해 편집 부분을보십시오. – Rex

+0

thanx.it가 올바르게 작동하고 오류가 없습니다. – mahfuz110244

0

로그인 양식을 사용해보십시오.

private void ButtonClick(object sender, EventArgs e) 
{ 
    Form aform = new Form(); 
    aform.Show(); 
    aform.FormClosing += FrmClosing; 
    Hide(); 
} 

private void FrmClosing(object sender, FormClosingEventArgs e) 
{ 
    Show(); 
} 

기본적으로, 당신은 다른 형태의 양식을 폐쇄 이벤트 (로그인 양식에서) 듣고가 발생하면 다시 로그인 폼을 보여줍니다. 내 프로그램을위한 치료를해라.

+0

사실은 내가 한 실수 로그인 폼 쇼를 가지고 있지만 컬렉션이 수정 된 예외를 보여; 열거 연산이 실행되지 않을 수 있습니다.이 예외를 제거하여 plzzzz에 도움이됩니다. – mahfuz110244

+0

게시 한 코드를 구현했지만 여전히 동일한 예외가 있습니까? 그건 나에게 맞는 소리가 아니야 ... 위의 코드를 구현해보십시오. 또는 그게 당신에게 좋지 않다면 스택 추적을 게시하십시오. – Trent

+0

나는이 ur 코드를 사용하지만 동일한 exception.u를 보여줍니다. 또한 ur 코드와 마찬가지로 로그인 폼에서 내 코드를 수행합니다. – mahfuz110244

0

f.Close()을 호출하여 양식을 삭제하고 foreach에서 반복되는 컬렉션을 변경하여 반복을 계속할 수 없기 때문에 예외입니다.

그리고 난 당신이에서 코드를 변경해야한다고 생각 :

new login_Form().Show(); 

에 : 여기

login_Form.Show(); 
+0

이렇게하면 login_form을 얻을 수 없습니다. – mahfuz110244

관련 문제