在启动XNA游戏之前启动表单

时间:2017-02-20 17:16:11

标签: c# winforms xna

所以我在游戏网站的“新闻”页面上创建了一个带浏览器的表单。它有2个按钮:“开始游戏”和“关卡编辑器”。

我目前正在使用DialogResult检查是否点击了这些按钮 - “开始游戏”有DialogResult = Yes,“关卡编辑器”有DialogResult = No。是的,这是一个丑陋的解决方案,但我无法使用Application.Run(newsForm);,因为我不知道如何检查newsForm类之外的按钮点击。

我的XNA项目的Program.cs:

[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或用户期望它们的含义
  3. 因此,如果你有任何想法我如何能够达到我上面描述的,或者(最好)没有ShowDialog,我将不胜感激。

1 个答案:

答案 0 :(得分: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;
        }
    }
}