所以我在游戏网站的“新闻”页面上创建了一个带浏览器的表单。它有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
。
正如我上面所说,我这样做的方式绝对不是设计明智的,因为:
DialogResult
或用户期望它们的含义因此,如果你有任何想法我如何能够达到我上面描述的,或者(最好)没有ShowDialog
,我将不胜感激。
答案 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;
}
}
}