2017-02-20 3 views
1

그래서 게임 사이트의 "뉴스"페이지에 브라우저가있는 양식을 만들었습니다. 그것은 "Start Game"과 "Level Editor"라는 2 개의 버튼을 가지고 있습니다.XNA 게임을 시작하기 전에 양식을 시작하십시오

"시작 게임"이 DialogResult = Yes이고 "레벨 편집기"가 DialogResult = No 인 경우이 버튼을 클릭했는지 확인하려면 현재 DialogResult을 사용하고 있습니다. 그래, 그게 못생긴 해결책이지만 Application.Run(newsForm);으로 작동하게 만들 수 없었습니다. newsForm 클래스 외부의 버튼 클릭을 확인하는 방법을 알지 못했기 때문입니다. 내 XNA 프로젝트의

Program.cs : 내 NewsForm 디자이너에서

[STAThread] 
private static void Main() 
{ 
    Application.EnableVisualStyles(); 
    using (var newsForm = new NewsForm()) 
    { 
     if (newsForm.ShowDialog() == DialogResult.Yes) 
     { 
      using (var game = new Game1()) 
      { 
       game.Run(); 
      } 
      newsForm.Dispose(); 
     } 
     else if (newsForm.ShowDialog() == DialogResult.No) 
     { 
      using (var editor = new EditorForm()) 
      { 
       Application.Run(editor); 
       newsForm.Dispose(); 
      } 
     } 
    } 
} 

나는 적절한 값으로 버튼의 DialogResult 속성을 설정합니다. 하지만 또 다른 문제가 있습니다 :

"게임 시작"을 클릭하면 XNA 양식이 올바르게 표시되고 NewsForm이 닫힙니다. 그러나 "레벨 편집기"를 클릭하면 양식이 닫히고 다시 열리는 것처럼 보입니다 ... 버튼을 다시 클릭하여 editor 양식을 시작해야합니다. 그리고 "Start Game"을 클릭하면 게임이 종료됩니다. 그게 DialogResult에 의한 것이라고 확신합니다.

  1. 그것은 대화가 아닌 형태의
  2. 버튼은 의미하지 않는다 :

    나는 내가하고 있어요 방법이 있기 때문에, 확실히 올바른 디자인 현명하지 않다, 위에서 말했듯이 무엇 DialogResult 또는 사용자가 어떤 아이디어가 있다면 그들에게 내가 함께, 위의 설명하거나 (선호) ShowDialog없이, 나는 감사하게 될 거라고 무엇을 달성 할 수있는 방법

그래서 의미 것으로 기대하고있다.

답변

1

대신 사용 if()switch() : 완벽

[STAThread] 
private static void Main() 
{ 
    Application.EnableVisualStyles(); 
    using (var newsForm = new NewsForm()) 
    { 
     DialogResult dr = newsForm.ShowDialog(); 
     switch (dr) 
     { 
      case DialogResult.Yes: 
       using (var game = new Game1()) 
       { 
        game.Run(); 
        newsForm.Close(); 
        newsForm.Dispose(); // since you open the form with ShowDialog(), you must dispose of it manually. 
       } 
       break; 
      case DialogResult.No: 
       using (var editor = new EditorForm()) 
       { 
        Application.Run(editor); 
        newsForm.Close(); 
        newsForm.Dispose(); // since you open the form with ShowDialog(), you must dispose of it manually. 
       } 
       break; 
     } 
    } 
} 
+0

작품. –

관련 문제