2011-04-22 51 views
5

所以這裏是我的程序。更改時自動更新全局變量的標籤

using System; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     static int count = 0; 

     public Form1(){InitializeComponent();} 

     private void button1_Click(object sender, EventArgs e) 
     { 
      count += 1; 
      label1.Text = Convert.ToString(count); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      count -= 1; 
      label1.Text = Convert.ToString(count); 
     } 
    } 
} 

現在......我有一個計劃,添加或減去1號當我們按下兩個按鈕和一個保存價值全局變量計數,然後在LABEL1顯示它。

可以說我想改變另一個label(label2)的值,我想在每次label1改變時也顯示count變量值的內容。

因此,有一種方法,從中可以這樣做的按鈕使用事件:

private void button1_Click(object sender, EventArgs e) 
{ 
    count += 1; 
    label1.Text = Convert.ToString(count); 
    label2.Text = Convert.ToString(count); 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    count -= 1; 
    label1.Text = Convert.ToString(count); 
    label2.Text = Convert.ToString(count); 
} 

因此,這裏的問題...

但可以說我想更新的價值label2不是來自按鈕的事件,而是以某種方式,所以只要它發生變化,它就會自動從count變量中更新該值。

請幫忙。

回答

7

使用屬性這種情況

private int count 
private int Count 
{ 
    get { return count; } 
    set 
    { 
     count = value; 
     RefreshLabels(); 
    } 
} 

private void RefreshLabels() 
{ 
    label1.Text = Convert.ToString(count); 
    label2.Text = Convert.ToString(count); 
} 

而當你想改變計數,只要使用屬性,而不是

Count += 1; 
Count -= 1; 
+0

如果變量在program.cs文件中,而不是form.cs,該怎麼辦?它會有所作爲嗎? – pyCthon 2012-11-25 21:09:52

+0

如果你有從你的表單類的變量,它將工作的引用 – Stecya 2012-11-26 10:31:34

4

您無法將數據綁定到一個static成員,你可以數據綁定到一個字段(除非你使用自定義綁定模型);一個選擇是有一定的語境實例,你可以將數據綁定也一樣,例如:

public class Counters { 
    public event EventHandler SomeNameChanged; 
    private int someName; 
    public int SomeName { 
     get { return someName; } 
     set { 
      if(someName != value) { 
       someName = value; 
       var handler = SomeNameChanged; 
       if(handler != null) handler(this, EventArgs.Empty); 
      } 
     } 
    } 
} 

然後有可能到Counters實例傳遞到您的表單和數據綁定:

private void BindCounters(Counters counters) 
{ 
    label1.DataBindings.Add("Text", counters, "SomeName"); 
    label2.DataBindings.Add("Text", counters, "SomeName"); 
} 

你當然可以有一個staticCounters的實例,但是:這不是一個好設計; static通常意味着你正在採取哈克捷徑。

1

如何使用屬性?它不再是靜態的,那是一個要求?

[編輯:你可以把_count再次靜態的,是一個要求的情況下。]

private EventHandler CountChanged; 

private int _count; 
private int count 
{ 
    get 
    { 
     return _count; 
    } 
    set 
    { 
     if(_count != value) 
     { 
      _count = value; 
      if(CountChanged != null) 
       CountChanged(this, EventArgs.Empty); 
     } 
    } 
} 

這將始終觸發事件CountChanged每當count被修改,所以您可以將您的自定義事件處理程序對每個控制。