2011-04-27 5 views
1

Visual Studio C#을 사용하고 있는데 새로운 양식을 만드는 데 주력했습니다. 닫을 때 닫히는 응용 프로그램이 필요하며 응용 프로그램을 닫지 않고 이전 양식을 닫고 싶습니다.Windows 폼을 응용 프로그램의 기본 폼으로 설정하는 방법은 무엇입니까? C#

현재 시도 (작동하지 않습니다) : 응용 프로그램이 종료되는 이유

FormClass newForm = new FormClass(); 
newForm.Show() 

previousForm.Close() 

답변

3

먼저 이해합니다. documentation of Application.Run(Form)에서 :

이 방법은 에 폐쇄 이벤트에 대한 mainForm 매개 변수를 이벤트 처리기를 추가합니다. 이벤트 처리기는 ExitThread를 호출하여 응용 프로그램을 정리합니다.

당신은 당신이 그것을 닫아야합니다 (또는 오히려 것) 경우 단지

알터 Program.cs 그것을 숨기기보다는 오히려 그것을

FormClass newForm = new FormClass(); 
newForm.Show(); 

previousForm.Hide(); 

을 닫는 도망 할 수 있습니다.

var form = new Form1(); 
form.Show(); 
Application.Run(); // The application will not exit when form is closed 

을하지만,이 경우에, 당신은 응용 프로그램을 호출해야합니다 당신을 종료에서 실행 (양식)에 의해 추가 된 이벤트 핸들러를 방지하기 위해, 이러한 처리기를 추가하지 않는) 실행 (의 과부하를 사용합니다. newForm이 닫힐 때 (또는 나가기를 원하는 다른 환경에서) Exit()를하십시오.

+0

Nice - 나는 Application.Run (Form)이 실제로 이벤트 핸들러를 등록했다는 것을 결코 깨닫지 못했습니다. – Justin

+0

우리가 너무 자주 보지 않는 것 중 하나입니다. 맞습니까? :) –

-1

스플래시 화면과 같은 것을 사용하려는 경우 백그라운드 스레드에서 첫 번째 양식을 호출하고 완료된 경우 작업 완료 후 스레드를 중단하십시오. "첫 번째"양식이 닫힙니다.

또는 "스플래시 화면 양식"을 닫아 배경 스레드를 종료하십시오.

도움이 될까요?

+1

이것은 끔찍한 생각입니다. 스레드를 중단하지 않아야하며 모든 사용자 인터페이스 코드는 단일 스레드에 있어야합니다. – Justin

+0

글쎄, 나는 이것이 끔찍한 생각이라고 생각하지 않는다. 몇몇 스플래시 스크린 샘플은이 기술을 사용합니다. 그리고, 질문에 의해, 나는 이것이 druttka 의도를하기위한 좋은 방법이 될지 정말로 모른다. 나는 그 일을 성취 할 수있는 아이디어를 얻었을 뿐이다. – marcoaoteixeira

관련 문제