2017-02-20 46 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

完美的作品。 –