2017-02-20 1 views
1

J'ai donc créé un formulaire avec un navigateur à la page "News" sur le site de mon jeu. Il a 2 boutons: "Démarrer le jeu" et "Éditeur de niveau".Démarrer un formulaire avant de lancer un jeu XNA

Je suis actuellement en utilisant DialogResult pour vérifier si l'un de ces boutons a été cliqué - "Démarrer le jeu" a DialogResult = Yes et "Éditeur de niveau" a DialogResult = No. Ouais, c'est une solution moche mais je ne pouvais pas le faire fonctionner avec Application.Run(newsForm); parce que je ne savais pas comment vérifier les clics de bouton en dehors de la classe newsForm.

Program.cs de mon projet 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(); 
      } 
     } 
    } 
} 

Dans mon concepteur NewsForm je mis la propriété DialogResult des boutons à la valeur appropriée. Mais j'ai un autre problème:

Lorsque je clique sur "Démarrer le jeu", le formulaire XNA s'affiche correctement et le NewsForm est fermé. Mais quand je clique sur "Éditeur de niveau" le formulaire a l'air de se fermer puis de rouvrir ... Je dois cliquer à nouveau sur le bouton pour lancer le formulaire editor. Et si je clique sur "Démarrer le jeu", il se ferme. Je suis sûr que c'est causé par le DialogResult.

Comme je l'ai dit plus haut, la façon dont je le fais est certainement pas une sage conception correcte, parce que:

  1. Il est une forme, pas une boîte de dialogue
  2. Les boutons ne signifient pas ce que le DialogResult ou l'utilisateur les attend signifie

donc, si vous avez une idée comment je peux obtenir ce que je décris ci-dessus, ou (de préférence) sans ShowDialog, je serais reconnaissant.

Répondre

1

Utilisation switch() au lieu de 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

fonctionne parfaitement. –