2013-04-04 41 views
-1

我是C#的初學者,他決定在Winform中創建基於文本的冒險遊戲,但是我一直在努力更新表單,以便隨時更新。在過去,我使用something.Invalidate();更新圖像,但顯然這不適用於整個表單。更新整個Winform

我有一套基於整數顯示文本的標籤,每當整數的值更新時,我都希望表單顯示出來。

我迄今爲止嘗試:

public partial class GameWindow : Form 
{ 
    public void buttonInventory_Click(object sender, EventArgs e) 
    { 
     Basic.HP = Basic.HP++; 
     this.Refresh(); 
    } 
} 

雖然HP的更新,形式不顯示它。除Refresh();之外還有什麼我應該使用的嗎?很多谷歌搜索主要是關於Backgroundworkers的解釋,但是我是否真的需要另一個線程來實現像這樣簡單的事情?

+0

難道你只是在更新時將標籤的文本設置爲整數值? – JosephGarrone 2013-04-04 12:34:26

+0

什麼是HP,什麼是Basic?現在的問題是不應答的。\ – 2013-04-04 12:34:31

+0

@HenkHolterman:Basic.HP只是一個整數的名稱。 – Biggar 2013-04-04 12:50:26

回答

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; 
    } 
} 

並稱之爲對埃維值的變化。

+0

一個很好的解決方法,工作,不能相信我以前沒有想到這一點。謝謝! – Biggar 2013-04-04 12:49:44

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.

+0

Asryael基本上提出了相同的解決方案。很好的工作,我仍然無法相信我自己沒有想到這一點。謝謝! – Biggar 2013-04-04 12:53:37

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 
} 

那麼,對於基本的HP改變時,它會在GameWindow觸發一個事件來更新相應的字段。