C# 更改时自动从全局变量更新标签
这是我的节目C# 更改时自动从全局变量更新标签,c#,winforms,events,label,auto-update,C#,Winforms,Events,Label,Auto Update,这是我的节目 using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { static int count = 0; public Form1(){InitializeComponent();} private void button1_Click(objec
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中显示
假设我想更改另一个标签(label2)的值,在这个标签中,我还想在每次label1更改时显示count变量value的内容
所以有一种方法,使用按钮中的事件,可以这样做:
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变量中的值,只要它发生变化
请提供帮助。在这种情况下使用属性
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;
不能将数据绑定到
静态成员,也不能将数据绑定到字段(除非使用自定义绑定模型);一种选择是使用一些您也可以绑定数据的上下文实例,例如:
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);
}
}
}
}
然后可以将计数器
实例传递到表单,并进行数据绑定:
private void BindCounters(Counters counters)
{
label1.DataBindings.Add("Text", counters, "SomeName");
label2.DataBindings.Add("Text", counters, "SomeName");
}
当然,您可以有一个计数器的静态
实例,但同样:这不是一个好的设计<代码>静态
通常意味着你走的是一条很短的捷径。如何使用属性?它不能再是静态的了,这是一个要求吗
[编辑:如果需要,您可以再次将_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);
}
}
}
每当修改count
时,这将始终触发事件CountChanged
,因此您可以为每个控件附加自定义事件处理程序。如果变量在program.cs文件中而不是form.cs中,该怎么办?这会有什么不同吗?如果您从表单类中引用了该变量,那么它将起作用