2017-02-20 27 views
1

Итак, я создал форму с браузером на странице «Новости» на сайте моей игры. Он имеет 2 кнопки: «Начать игру» и «Редактор уровней».Запустите форму перед запуском игры XNA

В настоящее время я использую DialogResult, чтобы проверить, нажата ли какая-либо из этих кнопок. «Начальная игра» имеет DialogResult = Yes, а «Редактор уровней» - DialogResult = No. Да, это уродливое решение, но я не смог заставить его работать с Application.Run(newsForm);, потому что я не знал, как проверять кнопки за пределами класса newsForm.

Program.cs моего XNA проекта:

[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(); 
      } 
     } 
    } 
} 

В моем NewsForm дизайнере я поставил DialogResult свойство кнопок соответствующего значения. Но у меня есть еще одна проблема:

Когда я нажимаю «Начать игру», форма XNA отображается правильно, а NewsForm закрыт. Но когда я нажимаю «Редактор уровней», форма выглядит так, будто закрывается, а затем снова открывается ... Мне нужно снова нажать кнопку, чтобы начать форму editor. И если я нажму «Начальная игра», он закрывается. Я уверен, что это вызвано DialogResult.

Как я уже говорил выше, то, как я делаю это, безусловно, не правильный дизайн-мудрым, потому что:

  1. Это форма, а не диалог
  2. Кнопка не означает что DialogResult или пользователь ожидает, что они имели в виду

Так что если у вас есть какие-либо идеи, как я могу добиться того, что я описал выше, или (предпочтительно) без ShowDialog, я был бы признателен.

ответ

1

Использование switch() вместо if():

[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

отлично работает. –