0

私は、GlobalDataクラスから「データ変更」通知を受け取るという基本的な概念で車輪を回しています。

単一のコントロール(textBox1)を備えたForm1があり、番号が変更されたときに、対応するプロパティを「グローバル変数」クラスに設定します。

ここで、プロパティが設定されたら、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);
        }
   } 

GlobalClassのもの...

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 に答える