C# 从标签上减去一个数字
我是C#的新手,我有一个关于如何从标签中减去一个数字的问题 我正在申请。情况如下: 我有一个按钮,上面写着“攻击”,还有一个标签叫做“lblTotalEnemyLifes”。现在,当我按下按钮时,我想从标签的总血量中减去1“伤害”,按下按钮后标签将自动更新。我尝试了很多不同的方法,但似乎没有任何效果。目前,我尝试了以下方法:C# 从标签上减去一个数字,c#,label,subtraction,C#,Label,Subtraction,我是C#的新手,我有一个关于如何从标签中减去一个数字的问题 我正在申请。情况如下: 我有一个按钮,上面写着“攻击”,还有一个标签叫做“lblTotalEnemyLifes”。现在,当我按下按钮时,我想从标签的总血量中减去1“伤害”,按下按钮后标签将自动更新。我尝试了很多不同的方法,但似乎没有任何效果。目前,我尝试了以下方法: int damage = -1; int life = Convert.ToInt32(lblTotalEnemyLifes.Text); life = life -
int damage = -1;
int life = Convert.ToInt32(lblTotalEnemyLifes.Text);
life = life - damage;
我试了很多,比这个多。如果有人能帮我从标签上减去一个数字。。那太好了
提前谢谢 您正在减去数字,但不要写回:
lblTotalEnemyLifes.Text = life.ToString();
更改life
的值不会影响标签。您应该更新标签的Text
属性
而且,您正在减去-1
而不是1
,表达式变成life=life+1
。您可以使用减量
运算符从变量中减去1
:
int life = Convert.ToInt32(lblTotalEnemyLifes.Text);
life--; // equivelant to life = life - 1;
lblTotalEnemyLifes.Text = life.ToString();
您正在减去数字,但不要写回:
lblTotalEnemyLifes.Text = life.ToString();
更改life
的值不会影响标签。您应该更新标签的Text
属性
而且,您正在减去-1
而不是1
,表达式变成life=life+1
。您可以使用减量
运算符从变量中减去1
:
int life = Convert.ToInt32(lblTotalEnemyLifes.Text);
life--; // equivelant to life = life - 1;
lblTotalEnemyLifes.Text = life.ToString();
尝试将伤害设置为1,而不是-1。 然后在末尾添加:
lblTotalEnemyLifes.Text=life.ToString() 尝试将伤害设置为1,而不是-1。 然后在末尾添加:
lblTotalEnemyLifes.Text=life.ToString() 另一种可能更优雅、更不容易出错的方法是: 在类中包装您的价值:
public class GameState
{
public int TotalEnemyLifes { get; set; }
}
接下来,实例化该类并将其绑定到UI:
var ctx = new GameState { TotalEnemyLifes = LIFE_VALUE };
this.DataContext = ctx;
接下来,更新按钮事件处理程序中的值:
private void event_Handler(object sender, RoutedEventArgs e)
{
ctx.TotalEnemyLifes--;
BindingOperations.GetBindingExpression(lblTotalEnemyLifes, Label.ContentProperty).UpdateTarget();
}
另一种可能更优雅、更不容易出错的方法是: 在类中包装您的价值:
public class GameState
{
public int TotalEnemyLifes { get; set; }
}
接下来,实例化该类并将其绑定到UI:
var ctx = new GameState { TotalEnemyLifes = LIFE_VALUE };
this.DataContext = ctx;
接下来,更新按钮事件处理程序中的值:
private void event_Handler(object sender, RoutedEventArgs e)
{
ctx.TotalEnemyLifes--;
BindingOperations.GetBindingExpression(lblTotalEnemyLifes, Label.ContentProperty).UpdateTarget();
}
将数据存储在标签中是个坏主意。标签和文本框只能用于用户交互(输入和输出/显示)。将数据存储在变量、字段或属性中。最好为游戏逻辑使用单独的类,而不是在表单中执行逻辑
public class Game
{
private const int InitialLifesCount = 100;
public Game()
{
EnemyLifes = InitialLifesCount;
}
public int EnemyLifes { get; set; }
public AttackEnemy()
{
EnemyLifes--;
}
}
以你能写的形式
private _game = new Game();
[TestMethod]
public void AttackingEnemyReducesHisLifes()
{
var game = new Game();
int lifesBefore = game.EnemyLifes;
game.AttackEnemy();
Assert.AreEqual(lifesBefore - 1, game.EnemyLifes);
}
在按钮中,单击:
_game.AttackEnemy();
lblTotalEnemyLifes.Text = _game.EnemyLifes.ToString();
这也是一个好主意,看看。如果在游戏类中实现INotifyPropertyChanged
接口,并将类属性绑定到标签,则标签将自动更新
除了提高清晰度外,逻辑和I/O的分离还允许您编写游戏逻辑。在单元测试中,您可以编写
private _game = new Game();
[TestMethod]
public void AttackingEnemyReducesHisLifes()
{
var game = new Game();
int lifesBefore = game.EnemyLifes;
game.AttackEnemy();
Assert.AreEqual(lifesBefore - 1, game.EnemyLifes);
}
将数据存储在标签中是个坏主意。标签和文本框只能用于用户交互(输入和输出/显示)。将数据存储在变量、字段或属性中。最好为游戏逻辑使用单独的类,而不是在表单中执行逻辑
public class Game
{
private const int InitialLifesCount = 100;
public Game()
{
EnemyLifes = InitialLifesCount;
}
public int EnemyLifes { get; set; }
public AttackEnemy()
{
EnemyLifes--;
}
}
以你能写的形式
private _game = new Game();
[TestMethod]
public void AttackingEnemyReducesHisLifes()
{
var game = new Game();
int lifesBefore = game.EnemyLifes;
game.AttackEnemy();
Assert.AreEqual(lifesBefore - 1, game.EnemyLifes);
}
在按钮中,单击:
_game.AttackEnemy();
lblTotalEnemyLifes.Text = _game.EnemyLifes.ToString();
这也是一个好主意,看看。如果在游戏类中实现INotifyPropertyChanged
接口,并将类属性绑定到标签,则标签将自动更新
除了提高清晰度外,逻辑和I/O的分离还允许您编写游戏逻辑。在单元测试中,您可以编写
private _game = new Game();
[TestMethod]
public void AttackingEnemyReducesHisLifes()
{
var game = new Game();
int lifesBefore = game.EnemyLifes;
game.AttackEnemy();
Assert.AreEqual(lifesBefore - 1, game.EnemyLifes);
}
首先,减去负值
-(-1)
会增加生命。除此之外什么是坏的?数学上不正确!首先,减去负值-(-1)
会增加生命。除此之外什么是坏的?数学上不正确!谢谢你的快速回复。你说的是真的。我没有把它写回我的标签上。非常感谢@MaximeLange您应该单击复选标记以指示此选项已修复您的问题。尤其是因为它有助于解决另一个你甚至还不知道自己已经解决的问题。是的。符合事实的今天我第一次使用stackoverflow。谢谢你的评论谢谢你的快速回复你说的是真的。我没有把它写回我的标签上。非常感谢@MaximeLange您应该单击复选标记以指示此选项已修复您的问题。尤其是因为它有助于解决另一个你甚至还不知道自己已经解决的问题。是的。符合事实的今天我第一次使用stackoverflow。谢谢你的评论