单击导致表单显示表单的按钮,然后显示表单的另一个副本。我只在某个条件为真时调用表单一次。这可能是什么原因?
if (selectedGame.NumOfPlayerShortForGame == 0)
{
bl.UpdateGamePlayerTurn(myGame.GameID, username);
GoToPlayingScreen();
}
private void GoToPlayingScreen()
{
frmPlayingScreen playingScreen = new frmPlayingScreen(myGame, username);
this.Hide();
playingScreen.Show();
}
private void timerUpdateBindings_Tick(object sender, EventArgs e)
{
timerUpdateBindings.Stop();
if (counter == 0)
{
UpdateBindings();
//myGame = bl.GetUserGame(username);
if (myGame != null)
{
if (bl.GetRemainingPlayers(myGame.GameID) == 0)
{
counter++;
GoToPlayingScreen();
}
}
}
timerUpdateBindings.Start();
}
答案 0 :(得分:1)
没有看到任何源代码,我只能猜测。但是,听起来你可能有“遗忘事件处理程序”这个旧的最喜欢的问题。您可能在某个事件上有一个事件处理程序,它打开与触发事件的代码相同的表单,从而导致打开表单的两个副本。
您应该发布您的代码(如果可能的话,将其缩小到重要部分),以便我们提供更多有用的帮助。
答案 1 :(得分:0)
在表单的构造函数中放置一个断点 - 您将能够逐步查看表单的实例化位置。
明显的问题:你是否两次调用GoToPlayingScreen()?我不确定你在第一个IF语句中做了什么(它不在方法中)。
答案 2 :(得分:0)
我的猜测是这个小金块是问题
if (selectedGame.NumOfPlayerShortForGame == 0)
{
bl.UpdateGamePlayerTurn(myGame.GameID, username);
GoToPlayingScreen();
}
因为在初始化时你可能没有任何玩家玩游戏所以selectedGame.NumOfPlayerShortForGame可能等于零。
正如Charlie Salts建议的那样,尝试设置一些断点来查看程序执行的流程。在任何调用GoToPlayingScreen()的地方设置断点。这将在调用方法时暂停执行程序。
如果执行只暂停一次,但您仍然看到两个游戏屏幕,请尝试设置断点 playingScreen.Show();
看看你在哪里打电话。尝试使用autos工具查看计数器是否正在测试两次等于零。我不知道它是如何可能的,但这只是另一个建议。你知道代码,它有时会以神奇的方式运作。