2012-11-30 4 views
1

내 프로그램에는 여러 가지 양식이 있습니다. 마지막 다섯 번째 폼에는 버튼을 클릭하면 Application.Exit() 메서드를 사용하여 응용 프로그램을 닫습니다. 그러나 나는 오류가 나타납니다 버튼을 클릭 할 때마다 내 첫 번째 양식에이 코드를 둘러싼 '삭제 된 개체에 액세스 할 수 없습니다'폐기 된 개체에 액세스 할 수 없습니다.

frm2 f2 = new frm2(); 
      this.Hide(); 
      f2.ShowDialog(); 
      this.Show(); 

컴파일러는 문 this.show()가 문제가 있음을 나타냅니다. 누군가 내가 왜이 오류를 받고 그것을 고칠 수 있는지 설명 할 수 있습니까?

+2

예외가 던져지고있는 행'this.Hide();'입니까? ('this')의 최종 양식을 보여주는 양식이 이미 삭제되었을 수 있습니다. 이 예제에서 빠진 코드가 많아 정확한 문제를 진단하기가 어렵습니다. – dash

+1

던져진 예외는 어느 라인입니까? – craig1231

+0

나는 T.S.와 함께있다. - 4 줄의 코드에서 세 개의 분리 된 형식 변수를 사용할 수 있습니까? –

답변

2

내 대답이 편집되었습니다. 문제가 재현되었습니다. Form.ShowDialog을 사용하려면 응용 프로그램을 닫는 컨트롤의 DialogResult를 설정해야합니다. 따라서 버튼 속성에서 대화 상자 결과를 무언가로 설정해야합니다 (예 : Cancel). 버튼에 다음

이 같은 일을 할 것이라고 이벤트를 클릭

private void btnClose_Click(object sender, EventArgs e) 
    { 
     if (this.DialogResult == DialogResult.Cancel) 
     { 
      Application.Exit(); 
     } 
    } 

를 그렇지 않으면 Form.ShowDialog를 사용할 필요가없는 경우, 당신은 단지 Form2를 표시 할 수 있습니다. 위의 테스트에서 오류가 발생하지 않습니다.

+0

그건 말이되지 않습니다. 방금 생성 한 폼에서'Hide'를 호출 할 필요가 없으며 모델 대화 상자가 나타나게하려면'Show'를 호출 할 필요가 없습니다. 이 두 호출은 여기에 필요하지 않습니다. – Ran

+0

응용 프로그램을 깨끗하게 종료하려면 양식을 닫는 것이 좋습니다. 이 양식에서 메인 메시지 루프가'Application.Run (form1)'을 사용하여 시작 되었다면, 애플리케이션은 정상적으로 종료됩니다. 그렇지 않다면 Main에서 폼의'Closed' 이벤트에 대한 핸들러를 붙이면'Application.Exit'이 호출됩니다. 요점은 - 양식은 나가기를 호출하는 양식이 아니어야한다는 것입니다. – Ran

0

코드 예에서 frm2Application.Exit을 호출 했습니까? 그랬다면 왜 this.Show에 다시 전화하려고합니까?

어쨌든 응용 프로그램의 메시지 루프를 시작한 방법과 관련된 문제가 발생할 수 있습니다. Application.Run() 또는 Application.Run(form1)을 (를) 실행하고 있습니까?

메시지 루프를 시작할 때 Application.Run()에 양식을 제공 한 경우 응용 프로그램을 종료하려면 Application.Exit으로 전화하지 않아야합니다. 대신 메인 루프를 닫으면 메시지 루프가 끝나고 Application.Run에 대한 호출이 반환되고 응용 프로그램이 완전히 종료됩니다.

+0

Application.Exit()에 대한 호출은 내 다섯 번째이자 마지막 양식에서 이루어집니다. – JeliBeanMachine

관련 문제