如何从其他表单更新标签值
本文关键字:更新 标签 表单 其他 | 更新日期: 2023-09-27 18:26:36
我正在尝试制作一款RPG游戏,但在更新带有"玩家健康"的标签时遇到了一些问题。我有两张表格。第一个被称为"游戏",它包含以下代码。
private void Battle_Click(object sender, EventArgs e)
{
Battle battle = new Battle();
battle.Show();
}
public void Game_Load(object sender, EventArgs e)
{
if (HeroMaker.wizardChoosen)
{
wizard = new Wizard(HeroMaker.className);
NameLabel.Text = HeroMaker.className;
HealthLabel.Text = wizard.Health.ToString();
}
}
该表单创建了我的类,并用球员的姓名和健康状况填充姓名和健康标签。当我点击"战斗"按钮时,它会创建一个新的形态,我可以在其中与一些生物战斗。第二种形式的来了
private void AttackTroll_Click(object sender, EventArgs e)
{
Game.wizard.DoBattle(troll); // Attacks a troll which has 40 return damage, and player health is 200.
MessageBox.Show(Game.wizard.Health.ToString()); // Shows that player health is now 160 (working fine).
Game newGame = new Game(); // Making a new form to get accses to the label I need (thats the only way I know).
newGame.HealthLabel.Text = Game.wizard.Health.ToString(); // This is suposed to update the label from 200 to 160, BUT IT STAYS AT 200.
newGame.Show(); // Help me, please.
}
该按钮攻击具有回复伤害的生物。问题是,我需要用新值更新第一个表单中的"HealthLabel",但我无法做到。提前感谢。
这是一个相当常见的混淆点。您正在实例化与原始Game
实例无关的第二个Game
表单。
相反,修改您的Battle
表单,以便将对Game
表单的引用传递给它:
public class Battle : Form
{
private Form game;
public Battle(Form game)
{
InitializeComponent();
this.game = game;
}
修改你的Game
表格,这样就有了一种更新标签的方法:
public class Game : Form
{
public void UpdateHealth(string health)
{
HealthLabel.Text = health;
}
现在,Battle
类可以使用引用和公共方法,并且不需要创建Game
的第二个实例。
game.UpdateHealth(Game.wizard.Health.ToString());