我是C#的初学者,他决定在Winform中创建一个基于文本的冒险游戏,但是我一直在努力在需要更新时更新表单。在过去,我使用something.Invalidate();
来更新图片,但显然这对整个表单都不起作用。
我有一组基于整数显示文本的标签,每当整数值更新时,我都希望显示该表单。
到目前为止我尝试过:
public partial class GameWindow : Form
{
public void buttonInventory_Click(object sender, EventArgs e)
{
Basic.HP = Basic.HP++;
this.Refresh();
}
}
HP更新时,表单未显示。除Refresh();
之外还有什么我应该使用的吗?很多谷歌搜索引起了对背景工作者的解释,但是我真的需要另一个线程来解决这个问题吗?
答案 0 :(得分:0)
为什么不在每个值更改后调用一个单独的例程来更新值。 IE :(注意 - 我不用C#编程):
public partial class GameWindow : Form
{
public void buttonInventory_Click(object sender, EventArgs e)
{
Basic.HP = Basic.HP++;
updateValues();
}
public void updateValues()
{
hp.text = HealthInteger;
basic.text = BasicInteger;
}
}
并将其称为evey值更改。
答案 1 :(得分:0)
标签不能绑定到字符串值,就像图像可以到图片框一样。
这里最简单的解决方案是每次更改HP属性时都明确设置标签的Text属性:
private void RefreshFormWithModel(Basic basic)
{
labelHP.Text = basic.HP;
}
public void buttonInventory_Click(object sender, EventArgs e)
{
Basic.HP = Basic.HP++;
this.RefreshFormWithModel(Basic);
}
如果你真的想要复杂的绑定,here is some lectures.
答案 2 :(得分:0)
我将假设Basic
的班级名称只是Basic
Basic
中的
private int hp;
public int HP
{
get { return hp; }
set { hp = value; HP_Changed(); }
}
public event EventHandler HPChanged;
private void HP_Changed()
{
if (HPChanged != null) { HPChanged(this, new EventArgs()); }
}
GameWindow
中的
//where ever you create a new Basic, add to the event handler
Basic Basic = new Basic();
Basic.HPChanged += Basic_HPChanged;
private void Basic_HPChanged(object sender, EventArgs e)
{
Basic b_sender = (Basic)sender;
int NewHealth = b_sender.HP;
//Update whatever value needs to be updated, here
}
然后,只要更改了Basic的HP,它就会在GameWindow中触发一个事件来更新相应的字段。