初学者
你可以为控件编写扩展方法,例如:
static class ExtensionMethods
{
static public void SetHealth(this ProgressBar control, Hero hero)
{
control.Max = hero.MaxHealth;
control.Value = hero.Health;
}
}
这样调用它:
ProgressBarHeroHealth1.SetHealth(Hero1);
中级
现在扩展方法很酷,但这是最愚蠢的使用方式。如果控制类没有被封装,更好的设计是编写一个适当的方法:
public class HealthBar : ProgressBar
{
public void SetHealth(Hero hero)
{
this.Max = hero.MaxHealth;
this.Value = hero.Health;
}
}
并以同样的方式调用:
HealthBarHeroHealth1.SetHealth(Hero1);
为了使此功能正常工作,您必须在使用任何UI平台时使用HealthBar而不是ProgressBar。
高级
但你知道什么会真正酷吗?一个可以自动更新的进度条。嗯...也许它可以监听某种事件....
class HeroHealthBar : ProgressBar
{
protected readonly Hero _hero;
public HeroHealthBar(Hero hero) : base()
{
_hero = hero;
hero.HealthChanged += this.Hero_HealthChanged;
}
public void Hero_HealthChanged(object sender, EventArgs e)
{
this.Max = _hero.MaxHealth;
this.Value = _hero.Health;
}
}
当然,你需要一个触发事件的 Hero 类...
class Hero
{
public event EventHandler HealthChanged;
public void SetHealth(int current, int max)
{
_health = current;
_maxHealth = max;
OnHealthChanged();
}
protected void OnHealthChanged()
{
if (HealthChanged != null) HealthChanged(this, EventArgs.Empty);
}
}
一旦完成所有设置,当您想要设置健康状态时,您只需要编写:
_hero.SetHealth(current,max);
...这将把它设置在英雄上,并自动通知进度条更新自己。
SetHealthValues(int health, int maxHealth)
的方法会更合理,你可以在其中设置属性和进度条。这样你只需要调用一个方法,它就能为你处理一切。 - maccettura