如何在值更改时更新标签值?

时间:2015-12-09 20:49:22

标签: c# forms

我正在尝试更新"玩家的健康状况。"当"玩家"攻击目标。根据目标的回击伤害减少球员的生命值。

我的游戏类(标签所在的位置):

public partial class Game : Form
{
    public static Wizard wizard;
    public static Assasin assasin;

    public Game()
    {
        InitializeComponent();
    }

    private void Battle_Click(object sender, EventArgs e)
    {
        Battle battle = new Battle();
        battle.Show();
    }

    public void Game_Load(object sender, EventArgs e)
    {
        NameLabel.Text = HeroMaker.className;
        if (HeroMaker.wizardChoosen)
        {
            wizard = new Wizard(HeroMaker.className);
            HealthLabel.Text = wizard.Health.ToString();
            DamageLabel.Text = wizard.AttackDamage.ToString();
            HealthBar.Maximum = wizard.Health;
            HealthBar.Value = wizard.Health;
        }

    }
}

我的战斗课(攻击发生时):

 public partial class Battle : Form
{
    Creature troll = CreaturesFactory.CreateCreature(CreatureType.Troll);
    public Battle()
    {
        InitializeComponent();
    }

    private void AttackTroll_Click(object sender, EventArgs e)
    {
        Game.wizard.Health -= troll.ReturnDamage;
        //TODO: Update the "HealthLabel value."
    }
}

问题在于,当我攻击巨魔时,玩家的健康状况正在下降,但标签上没有更新。提前谢谢。

1 个答案:

答案 0 :(得分:1)

您只需要更新标签:

private void AttackTroll_Click(object sender, EventArgs e)
{
    Game.wizard.Health -= troll.ReturnDamage;
    //TODO: Update the "HealthLabel value."
    HealthLabel.Text = wizard.Health.ToString();
    //any other things that need to be updated
}

您也可以像this question一样绑定标签值。

同样,您可以连接event,例如OnWizardHealthChange,以便在HP更改时更新标签值。这样,您就不需要记住在健康变化的任何地方添加HealthLabel.Text = wizard.Health.ToString();。在我链接的问题中有一个例子。

编辑:

您可以尝试查看创建标签的代码隐藏,以查看其访问修饰符(是public吗?)

或者,你可以试试这个:

Label healthLabel = (Label)Application.OpenForms["FormName"].Controls.OfType<Label>().First(x=> x.Name == "LabelName");

请注意,我还没有对它进行测试,但您应该能够至少使用此代码获取标签,然后在那里更新值。 Here是一个很好的讨论,可以用另一种形式访问控件(例如你的标签)。