我正在做一个记忆游戏,最后我需要与获胜者一起显示一个消息框。就像:“ PlayerName赢了!”就像您在我的代码中看到的那样,我正在尝试获取“ name1”标签和“ name2”标签的内容。当我开始游戏时,这些标签的默认内容是“玩家1”和“玩家2”。在我的游戏中,我有2个文本框,当我单击“设置”按钮时,名称会在屏幕上更改。因此,标签的内容发生了变化。但是,如果游戏结束,则消息框将显示:“玩家1赢了!”或“玩家2赢了!”而不是我设置的名称。如何使用标签的“更新”内容?
我的MainWindow.xaml.cs
private void setNames_Click(object sender, RoutedEventArgs e)
{
string userName1 = nameEnter1.Text;
string userName2 = nameEnter2.Text;
name1.Content = userName1;
name2.Content = userName2;
set1.Visibility = Visibility.Collapsed;
set2.Visibility = Visibility.Collapsed;
}
public object AccessNamePlayer1()
{
return name1.Content;
}
public object AccessNamePlayer2()
{
return name2.Content;
}
我的MemoryGrid.cs(另一个类)
private void checkWinner()
{
MainWindow window1 = new MainWindow();
object player1 = window1.AccessNamePlayer1();
MainWindow window2 = new MainWindow();
object player2 = window1.AccessNamePlayer2();
if (scoreName1Tot > scoreName2Tot)
{
MessageBox.Show(player1 + " heeft gewonnen!");
}
else if (scoreName1Tot < scoreName2Tot)
{
MessageBox.Show(player2 + " heeft gewonnen!");
}
else if (scoreName1Tot == scoreName2Tot)
{
MessageBox.Show("Gelijkspel!");
}
}
答案 0 :(得分:1)
MemoryGrid类不应访问任何数据的窗口。这应该是另一回事:Window将数据更新到关联的类(通常通过WPF中的Binding,但是直接更新也可以)。
因此在MemoryGrid中为播放器名称添加两个公共属性
public string player1 { get; set; }
public string player2 { get; set; }
private void checkWinner()
{
if (scoreName1Tot == scoreName2Tot)
{
MessageBox.Show("Gelijkspel!");
}
else
{
string winner = (scoreName1Tot > scoreName2Tot) ? player1 : player2;
MessageBox.Show(winner + " heeft gewonnen!");
}
}
并从MainWindow更新它们:
private void setNames_Click(object sender, RoutedEventArgs e)
{
string userName1 = nameEnter1.Text;
string userName2 = nameEnter2.Text;
memoryGridInstance.player1 = userName1;
memoryGridInstance.player2 = userName2;
name1.Content = userName1;
name2.Content = userName2;
set1.Visibility = Visibility.Collapsed;
set2.Visibility = Visibility.Collapsed;
}
AccessNamePlayer
不需要
答案 1 :(得分:0)
您应该调用AccessNamePlayer1()
的现有实例的AccessNamePlayer2()
和MainWindow
:
private void checkWinner()
{
MainWindow window1 = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
object player1 = window1.AccessNamePlayer1();
object player2 = window1.AccessNamePlayer2();
if (scoreName1Tot > scoreName2Tot)
{
MessageBox.Show(player1.ToString() + " heeft gewonnen!");
}
else if (scoreName1Tot < scoreName2Tot)
{
MessageBox.Show(player2.ToString() + " heeft gewonnen!");
}
else if (scoreName1Tot == scoreName2Tot)
{
MessageBox.Show("Gelijkspel!");
}
}