2011-01-12 5 views
1

나는 통계 버튼이있는 창 폼 애플리케이션 (게임)을 가지고있다. 사용자가 통계 버튼을 누르면 통계를 볼 수있는 새 창이 열립니다.하나의 창이 닫히는 동안 여러 개의 창 닫기

문제는 : 사용자가 통계 버튼을 클릭하면 통계 창이 팝업됩니다. 그가 게임의 옵션을 변경하기 위해 옵션 버튼을 누르면 나는 게임 폼을 닫지 만 통계 폼은 닫지 않는 코드를 가지고있다. 따라서 통계 양식을 닫는 것을 잊어 버리면 공개 상태로 유지됩니다.

게임 서식에서 통계 양식을 닫으려면 어떻게해야합니까?

답변

3

Form.Owner 속성을 사용하여 양식의 소유자를 지정하십시오. 귀하의 경우, 이것은 메인 윈도우이거나 사용자가 새 윈도우를 생성하도록 트리거 된 GUI 요소를 가진 윈도우 일 수 있습니다. 소유자가 닫히면 새 양식이 닫힙니다. 이 관계는 계단식이므로 양식 B의 소유자를 양식 A로 설정 한 다음 양식 C의 소유자를 B로 지정하면 A 또는 B를 닫으면 C가 닫힙니다 (A를 닫으면 B도 닫힙니다). B가 C를 생성하지만 C가 B와는 별개로 유용하다면 C의 소유자를 A (B의 Owner 속성을 통해 그렇게 할 수 있음)로 설정하고 B가 닫혀있을 때 C가 열린 상태를 유지하지만 A가 닫히면 C가 닫힙니다.

마지막으로 Application.Run (form mainForm)을 사용하여 "main"프로그램 양식을 열면 매개 변수로 지정된 창이 닫히면 응용 프로그램이 완전히 종료됩니다. 따라서 실행 파일이 A를 생성하고 A가 B를 생성하고 B가 C를 생성하면 A가 닫히면 응용 프로그램이 닫히고 소유권에 관계없이 모든 창이 닫힙니다.

+0

Excellent! 감사 –

-1

dialog으로 열기만하면 ShowDialog()을 사용하여 열지 않으므로 옵션 양식으로 돌아 가기 전에 닫아야합니다.
게임의 형태는 기본 양식은 다음의 경우 자동으로 다른 나머지 창을 닫해야한다, 그렇지 않으면 당신은 게임의 형태로 내부 어딘가에 satasForm을 선언하고, 사용자가 게임의 형태를 닫을 때 이제까지 그것을 닫습니다 관리해야

StatsForm sFrm = new StatsForm (); 
public gameFrm() 
{ 
InitializeComponent(); 
} 

private void btnShowStateForm_Click(object sender, EventArgs e) 
{ 
sFrm.Show(); //or call 
// sFrm.ShowDialog(); 
} 

private void gameFrm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
sFrm.Close(); 
} 
+0

모달 대화 상자는 UI에 중요한 제한 사항을 적용합니다. 통계가 실시간 게임에서 실시간 인 경우 통계를 모달 대화 상자로 표시하면 게임이 일시 중지되고 (멀티 플레이어에서는 불가능) 플레이어가 주 양식을 제어 할 수 없으면 점수 또는 게임을 잃을 수 있습니다 . 모달은 주로 실행이 중단 된 경우에 사용해야하며 사용자는 사용자가 질문에 응답하지 않은 이유 또는 정상 실행을 계속할 수없는 이유를 알아야합니다. 통계 창은이 둘 중 하나가 아닙니다. – KeithS

+0

내가 아는 한 게임의 모든 옵션 인터페이스는 대화 상자 또는 전체 창 모양으로 작동하며 이는 단지 표시 일 뿐이며 'Show()'는 무엇을 사용하는지 알 수 있습니다. –