子フォームから親フォームのオブジェクトを参照する方法

C#でゲッターとかセッターとかを持ったクラスのことをBeanというのかは不明ですが、親フォームでBeanクラスに格納した値とか、メンバ変数とかを子フォームから参照する場合のメモです。
うろ覚えなのでソースの細かい部分は間違ってるかも(汗

追記 (07/10/08): アクセッサと言うらしい。

// SampleForm1.cs
public double sampleValiable;
public SampleBean sb;

private void sampleButton_Click(object sender, System.EventArgs e){
  this.sb = new SampleBean();
  
  this.sb.Valiable = 1;
  this.sampleValiable = 2.0;

  SampleForm2 sForm2 = new sForm2();
  sForm2.ShowDialog(this);
}

とした場合に子フォームであるSampleForm2からSampleForm1のメンバ変数sampleValiableなどにアクセスする場合は

// SampleForm2.cs

private void SampleForm2_Load(object sender, System.EventArgs e){
  SampleForm1 sForm1 = (SampleForm1)this.Owner;

  int getSbValiable = sForm1.sb.Valiable;
  double getForm1Member = sForm1.Valiable;
}

とすればいいらしい。もっとスマートに行う方法はあるのでしょうか?

追記: スマートに行う方法 2007/06/14

コンストラクタに渡してやればいいそうです。
上記のクラスをコンストラクタに渡してやる方法で書き換えると下記のようになります。

// SampleForm1.cs
private void sampleButton_Click(object sender, System.EventArgs e){
  SampleBean sb = new SampleBean();
  
  sb.Valiable = 1;
  double sampleValiable = 2.0;

  SampleForm2 sForm2 = new sForm2(sampleValiable, sb);
  sForm2.ShowDialog(this);
}
// SampleForm2.cs
public void SampleForm2(double sampleValiable, SampleBean sb){
}

これでコンストラクタにオブジェクトなどが渡せましたので、privateなメンバ変数でも定義してコンストラクタ内で引数を格納してやれば他のメソッドでも利用できるようになります。

あぁ、すっきりした。

追記 2007/10/08

この記事のみ以下の環境

  • Visual C# 1.0(1.1?) @ Visual Studio 2003
  • .NET Framework 1.1 SDK
  • Windows XP Professional SP2