• 締切済み

C# Form処理

Form1とForm3からForm2を表示させれるようにして,どちらかのフォームのコントロールをクリック したらform2が立ち上がりformに応じた処理を行いたいのですが,下記のコードではエラーとなって 動きません int Pin1 = f1.butt1; int Pin3 = f3.butt3; if (Pin1 == 1) { int h = f1.but; for (int hj = 1; hj < 43; hj++) { if (h == hj) { //Labelに文字を入力。 string Memo = "label" + (hj + 93); string Hd = "label" + (hj + 51); Label f1_Memo = (Label)f1.Controls[Memo]; f1_Memo.Text = this.textBox1.Text; Label f1_Hd = (Label)f1.Controls[Hd]; f1_Hd.Text = this.textBox2.Text; } } } else if (Pin3 == 1) { int h3 = f3.but3; for (int hj3 = 1; hj3 < 43; hj3++) { if (h3 == hj3) { //Labelに文字を入力。 string Memo = "label" + (hj3 + 744); MessageBox.Show(Memo.ToString()); Label f3_Memo = (Label)f3.Controls[Memo]; f3_Memo.Text = this.textBox1.Text; } } } Form1のコントロールであれば上のforループ,Form3であれば下のforループで処理するように考えております.Form1でform3を開くコントロールを選択した場合上記コードのbutt1は0になるように しているつもりです. エラーは NullReferenceExceptionがハンドルされませんでした. オブジェクト インスタンスの作成には new キーワードを使用します。 何がいけなくてどう対処すればよろしいのでしょうか? ご教授よろしくお願いいたします.

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.5

>それをどうにかしたいのですが,ご教授願えませんでしょうか? > public Form2(Form1 f) でフォームを生成したときには f3 がnullですし、 > public Form2(Form3 f) でフォームを生成したときには f1 がnullなんですけど・・・ これ見て何をすべきなのか気づきませんか? 気づいてないのでしたら、がんばって気づいてください。 #2,#3にも書いてますけど私としてはForm2で直接Form1,Form3のコントロールを操作するのはお勧めしませんので。

すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.4

>下記のようにForm2にForm1とForm3をパブリック変数を使用し定義していますがエラーになります. パブリック変数にすればいいというものじゃ・・・ public Form2(Form1 f) でフォームを生成したときには f3 がnullですし、 public Form2(Form3 f) でフォームを生成したときには f1 がnullなんですけど・・・

Ashgin
質問者

補足

そのとおりです. それをどうにかしたいのですが,ご教授願えませんでしょうか?

すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.3

delegate void SetMemoDelegate(String s); public class Form2 : Form { public event SetMemoDelegate setMemo = null; private void buttun1_Click(object sender, EventArgs e) { if (setMemo != null) { setMemo(this.textBox1.Text); } } } Form2を作るときに Form2 f = new Form2(); f.setMemo += delegate(String s) { this.Memo.Text = s; }; f.show(this); こんな感じです。 変なところがあったらごめんなさい。

すると、全ての回答が全文表示されます。
  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

私としてはフォームから別のフォームのコントロールを直接参照や操作をするのはお勧めしないです。 Form1,Form3に行いたい処理のメソッドをつくっておいて Form2を生成時にイベントハンドラを設定してやって、そこからそれらメソッドを呼ぶのがよいかと思います。

すると、全ての回答が全文表示されます。
回答No.1

これは、Form2の中のコードでいいのでしょうか? そうすると、NullReferenceExceptionが出るのは、int Pin1 = f1.butt1;からでしょうかね・・。 その場合、Form1, Form3 をForm2から参照していない為と思われます。 Form2にパブリック変数を作って、Form1, Form3のアドレスをf1に入れてあげればいいのではないかと思います。

Ashgin
質問者

補足

返答遅くなりました. 下記のようにForm2にForm1とForm3をパブリック変数を使用し定義していますがエラーになります. 具体的にどのようにすればよいかご教授願えないでしょうか? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form2 : Form { Form1 f1; Form3 f3; public Form2(Form1 f) { f1 = f; // メイン・フォームへの参照を保存 InitializeComponent(); } public Form2(Form3 f) { f3 = f; // メイン・フォームへの参照を保存 InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { #region int Pin1 = f1.butt1; int Pin3 = f3.butt3;

すると、全ての回答が全文表示されます。

関連するQ&A