更新整个Winform

时间:2013-04-04 12:29:51

标签: c# winforms

我是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();之外还有什么我应该使用的吗?很多谷歌搜索引起了对背景工作者的解释,但是我真的需要另一个线程来解决这个问题吗?

3 个答案:

答案 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中触发一个事件来更新相应的字段。