0

我正在用我认为的基本概念旋转我的轮子:从 GlobalData 类接收“数据更改”通知。

我有一个带有单个控件的 Form1 (textBox1),当数字更改时,我在“全局变量”类上设置了相应的属性。

现在,当设置属性时,我想引发一个 Form2 可以订阅的事件并相应地更新其指示器。

基本结构是:Form1有textBox1和button1,Form2有textBox2,GlobalClass有testValue。

Form1 的东西....

   public partial class Form1 : Form {
        public GlobalClass myGlobals= new GlobalClass();
        private void button1_Click(object sender, EventArgs e) {
            myGlobals.testValue= Convert.ToInt32(textBox1.Text);
        }
   } 

全球类的东西...

public class GlobalClass{
    private int mynum;       
    public int testValue{
        get{
            return mynum;}
        set{
            mynum = value;
          // NEED TO RAISE MY 'HEY YOUR testVALUE HAS CHANGED!!' EVENT HERE?
        }
   }
}

Form2 的东西

    public partial class Form2 : Form {
       public GlobalClass myGlobals2;

//NEED TO RECEIVE NOTIFICATION THAT myGlobals2.testValue HAS BEEN UPDATED? 
//THEN I CAN DO textBox2.Text = myGlobals2.testValue.ToString();

    }

预先感谢您的帮助。

4

1 回答 1

0
  1. 您需要阅读 .NET 事件和委托。

  2. 您必须使GlobalClass实例成为真正的全局变量:

public class GlobalClass

{
  public static GlobalClass Instance = new GlobalClass();

  public event EventHandler ValueChanged;

  private int mynum;       
  public int testValue{
    get{
      return mynum;}
    set{
      if (mynum != value)
      {
        mynum = value;
        // NEED TO RAISE MY 'HEY YOUR testVALUE HAS CHANGED!!' EVENT HERE?
        if (ValueChanged != null)
        {
          EventArgs e = new EventArgs();
          ValueChanged(this, e);
        }
      }
    }

  }
}

并像这样解决它:

GlobalClass.Instance.testValue = 3;

Form2

protected void OnValueChanged(Object sender, EventArgs e) 
{
   <your code>
}

Form2构造函数中:

GlobalClass.Instance.ValueChanged += new System.EventHandler(this.OnValueChanged);
于 2013-03-26T02:22:12.423 回答