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

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が出力されるのだが、どうしてそうなるのかがなかなか理解して貰えない。はぁ。

2006/11/01(水)所持CD/DVD管理用Webアプリ

必要に迫られて作ろうと思っています。
とりあえずデータベースを設計してみる。

Table: Disc

カラム名データ型制約条件備考
DiscIDint unsignedprimary key / auto_increment
DiscNameverchar(255)not nullディスクタイトル
DiscNameYomiverchar(255)not nullディスクタイトルよみ
DiscCategoryIDsmallint(3) unsignedカテゴリID
DiscPaginationsmallint(2) unsignedディスク枚数
Depositoryverchar(64)保管場所
EntryDatedate登録日
UpdateDatedate更新日
Commenttextコメント

Table: DiscCategory

カラム名データ型制約条件備考
DiscCategoryIDsmallint(3) unsignedprimary key / auto_increment
DiscCategoryNameverchar(255)not nullディスクカテゴリ名

Table: Album

前に記事にした曲管理の為のデータベースと連携する場合のテーブル。他にもArtistテーブルとかも必要だけど、大本となるAlbumテーブルのみ再設計。

カラム名データ型制約条件備考
DiscIDint unsignedprimary key
DiscNosmallint(2) unsignedアルバム中の何枚目か
AlbumTypeIDsmallint(3) unsignedアルバムタイプID
ArtistIDint unsignedアーティストID
ReleaseDatedateリリース日
SPECverchar(16)規格品番
TotalTracksmallint(2)アルバムのトラック総数
TotalTimetimeアルバムの全時間
Commenttextコメント
asinverchar(10)Amazonとの連携*1

*1 : 将来的に画像表示などができればいいなぁ