如何使用变量的内容更新标签?

时间:2013-07-07 21:44:42

标签: c#

我正在制作一个程序,在主监视器上有一个表单,另一个在辅助监视器上。

我希望使用主窗体中变量的值更新辅助表单中标签的内容。

现在,我正在使用辅助表单中的计时器来读取主表单中的变量,并在变量更改时更新标签内容,但我想知道是否有更好的方法来执行此操作,没有一直在工作的计时器。

2 个答案:

答案 0 :(得分:2)

事件的来源(变量更改其值)是主要形式。因此,有责任通知每个外部实体(第二种形式)该值已被更改。

按照这种思路,您应该在主要表单中实现一个事件,并让变量更改时通知其他实体订阅此事件

在Form1(主窗体)中

public delegate void OnVeryImportantValueChanged(int newValue);
public event OnVeryImportantValueChanged ImportantValueChanged;

当您更改重要值的值时,请检查是否有人订阅了该事件,如果是肯定的,请调用事件处理程序

importantValue = CalculateNewValue();
if(ImportantValueChanged != null) 
    ImportantValueChanged(importantValue);

在Form2(次要形式)

Form1 newForm1 = new Form1();
newForm1.ImportantValueChanged += ReceiveNotificationForChange;
newForm1.Show();

public void ReceiveNotificationForChange(int newValue)
{
    label.Text = "NewValue received:" + newValue.ToString();
}

在上面的场景中,Form2打开Form1,但如果不是这种情况(Form1打开Form2),则该过程要求您在Form2的构造函数中传递Form1的实例并使用该实例连接事件

在Form1中

 Form2 newForm2 = new Form2(this);
 newForm2.Show();

在Form2的构造函数中

 public void Form2(Form1 callerInstance)
 {
      InitializaComponents();
      callerInstance.ImportantValueChanged += ReceiveNotificationForChange;
 }

答案 1 :(得分:0)

在主表单代码中,使用自动设置标签的属性,而不是使用变量来存储您的值:

private string _value;
private string Value {
  get { return _value; }
  set { 
    _value = value;
    if (secondForm != null) secondForm.lblValue.Text = value;
  }
}

然后,当您在主窗体中设置值时,使用Value = "blah blah";进行设置,属性设置器将为您更改标签。