コンストラクタの引数について

[戻る]
C#初心者 2008/04/08(火) 22:08:22
お世話になります。

環境はVisual studio.NET 2005 C#

C#を初めて1週間足らずの初心者です。

前回はView(C#)とDocument(C++)での関連性について伺いまして皆様の
おかげでやっと理解することが出来ました。

現在、サンプルプログラムを作成していて1点質問があります。

今回もView(C#)、Document(C++)にて作成しております。フォーム1か
らフォーム2を呼ぶ際にフォーム1のDocumentを引数で渡してフォーム
2のコンストラクタでフォーム1のDocumentをもらって参照しているの
ですが当然のことながらフォーム2のコンストラクタ内でしかDocumentが
参照できません。

やりたいことはフォーム2のコンストラクタ内とフォーム2の別のイベン
ト内(ボタン押下時等)でフォーム1のDocumentを参照したいのです。

何か上手い方法があればご教授お願いします。

επιστημη [HomePage] 2008/04/08(火) 23:02:51
Form2のメンバを追加し、コンストラクタで代入。

επιστημη [HomePage] 2008/04/08(火) 23:29:28
...日本語ヘンだ orz

Form2 に Document型のメンバを追加し、
コンストラクタで代入/各メソッドで参照。

C#初心者 2008/04/09(水) 09:21:12
επιστημηさん

さっそくの回答ありがとうございます。助かります。

現在はフォーム1からフォーム2を呼ぶさいに

form1内(form1.cs)--------------------------------------

form2 form2 = new form2(form1document)

form2.ShowDialog();

-------------------------------------------------------

でform2を表示させて

form2内(form2.cs)--------------------------------------

form2のコンストラクタの手前で

private Form2Document form2document

としてform2用のDocumentを定義

コンストラクタで

public form2(Form1Document form1document)

としてform1のDocumentを受け取る

コンストラクタのInitializeComponent()の後に

form2document = new Form2Document(form1document)


これだとコンストラクタ内でしかform1documentが参照できませんが

>>Form2 に Document型のメンバを追加し、
>>コンストラクタで代入/各メソッドで参照。

上記の記述をする場合はどこにどのように記述すれば各メソッドで参
照出来るのでしょうか?

無知なあまりにすみません。

C#初心者 2008/04/09(水) 09:30:18
続きになりますが

>>form2のコンストラクタの手前で
>>private Form2Document form2document

private Form2Document form2document;
private Form1Document form1document;

として

private Form1Document form1document;

を定義したところ各メソッドから参照できるようになりましたが

form1document.Setdata(引数)

form1のDocumentに定義している関数にアクセスしようとした際に

追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません

とエラーになりました。何か定義が抜けているのでしょうか?

επιστημη [HomePage] 2008/04/09(水) 09:50:58
class Form2 : Form { // Form2 に
  private Form1Document form1document; // Document型のメンバを追加し、

  public Form2(Form1Document doc) { 
    form1document = doc; // コンストラクタで代入
  }

  public void なにかしら() {
    form1document.SetData(...); //各メソッドで参照。
  }
}

void どこか() {
  form2 form2 = new form2(form1document);
  form2.ShowDialog();
}

こんだけのことでしょ?
なにがわからんかわからんです。

C#初心者 2008/04/09(水) 10:00:54
[[解決]]
επιστημηさん

分かりやすい説明本当にありがとうございます。

Document型のメンバを追加しただけでコンストラクタでの代入方法を
間違えていました。上記のコード通りに記述したところ上手く参照す
ることが出来ました!本当に感謝です!

確かに今のままでは何が分からないかも分からない状況でしたのでも
っと知識を身につけてから組んで行きたいと思います。

古いスレッドには追加発言できません。