2017-02-20 6 views
1

Also habe ich ein Formular mit einem Browser auf der "News" -Seite auf meiner Spieleseite erstellt. Es hat 2 Tasten: "Start Game" und "Level Editor".Starten Sie ein Formular, bevor Sie ein XNA-Spiel starten

ich derzeit DialogResult zu überprüfen, ob eine dieser Tasten bin mit geklickt wurde - „Spiel starten“ hat DialogResult = Yes und „Level Editor“ hat DialogResult = No. Ja, das ist eine hässliche Lösung, aber ich konnte es nicht mit Application.Run(newsForm); arbeiten lassen, weil ich nicht wusste, wie man auf Knopfklicks außerhalb der newsForm Klasse prüft.

Program.cs meiner XNA-Projekt:

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

In meinem NewsForm Designer stelle ich die DialogResult Eigentum der Tasten auf den entsprechenden Wert. Aber ich habe ein anderes Problem:

Wenn ich auf "Start Game" klicke, wird das XNA-Formular ordnungsgemäß angezeigt und NewsForm ist geschlossen. Aber wenn ich auf "Level Editor" klicke, sieht das Formular so aus, als ob es sich schließt und dann wieder öffnet ... Ich muss den Knopf erneut klicken, um das editor Formular zu starten. Und wenn ich auf "Spiel starten" klicke, wird es geschlossen. Ich bin sicher, dass das durch die DialogResult verursacht wird.

Wie ich oben gesagt, die Art, wie ich es zu tun habe, ist definitiv nicht das richtige Design-weise, weil:

  1. Es ist eine Form ist, kein Dialog
  2. Die Tasten bedeuten nicht, was die DialogResult oder der Benutzer erwartet, dass sie

So bedeuten, wenn Sie eine Idee, wie ich erreichen kann, was ich oben beschrieben, mit oder (vorzugsweise) ohne ShowDialog, würde ich dankbar sein.

Antwort

1

Verwenden switch() statt 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

funktioniert perfekt. –

Verwandte Themen