c# - 函数使用初始化的 label.content 而不是我设置的
问题描述
我正在制作一个记忆游戏,最后我需要向获胜者展示一个消息框。比如:“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!");
}
}
解决方案
MemoryGrid 类不应访问任何窗口以获取任何数据。它应该是另一种方式:窗口将数据更新到关联的类(通常通过 WPF 中的绑定,但直接更新也可以)。
所以在 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
不需要
推荐阅读
- arcore - ARCORE:通过单击此可渲染对象来删除特定的可渲染对象
- redis - redis分布式锁解决了什么问题?
- android - 为每个构建变体重建相同的本机代码
- python - Python:Pandas 读取 csv:读取 csv 时向下转换
- sql - 配置 oracle 过程,使其接受输入值
- javascript - Vuex - 仅在 getter 上修改状态对象
- python - 在python中,如何划分多元高斯分布以分离高斯?
- ember.js - EmberJS:一个字段的 JSON-API 错误包含在其他字段的错误中
- c++ - Doxygen 将全局变量声明视为 C++ 中的函数
- javascript - 使用antd table时,有复选框选择,复选框被清除