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

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

2007/05/22(火)Java

JDK5 APIリファレンス + IE6

Javaの研修にあたり必携であるJDK5のAPIリファレンスを調べる機会が多いのですが、このAPIリファレンスがくせ者で、IE6でドキュメント内の検索をかけると高確率でクラッシュします。

どうせIE6のバグのせいなのでしょうが、現在のところ追加でブラウザをインストールすることは許可されていない為、検索を封印して調べています。
Windowsのヘルプ形式でドキュメントが配布されていたPHPは良かったなぁ。

用語が嫌らしい

  • コンストラクタ
  • インスタンス
  • Beans

などの用語が飛び交います。
たいしたことをしていないのに、これらの用語を使って説明すると凄いことをしているように感じられるのがまた嫌らしい。

例えば、「○○クラスのコンストラクタを呼んでインスタンス化した上、○○クラスの××メソッドを利用する」っていうのは、言い換えれば「○○クラスの初期化関数を呼んで、作成中のクラス中で使用できるようにし、その上で××関数を利用する」って感じになる。このあたりがバズワードっぽくて嫌い。

2007/05/03(木)Eclipse 3.2

Javaの勉強のために統合環境としてEclipseを使用しているのだけど、重い。重すぎる。
WinXP Pro に512MBの実メモリではメモリ不足気味。たいしたコードを書いているわけではないのだけど170MBもメモリ食ってるし(汗
メモリ増やしたいなぁ。

2007/04/28(土)Javaのお勉強

研修でJavaを習っているのだが、プログラミング未経験者はメソッドの定義で躓いているらしい。
どうも引数と返り値の概念がよくわからないとのこと。

で、自分が説明したメソッドの例。

void main(){
	int i = 3, j = 4, k;
	k = plus(i, j);
	System.out.print( k );
}

int plus(int x, int y){
	int z;
	z = x + y;
	return z;
}

これをコンパイルして実行すれば7が出力されるのだが、どうしてそうなるのかがなかなか理解して貰えない。はぁ。