電子書籍の厳選無料作品が豊富!

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 キーワードを使用します。


何がいけなくてどう対処すればよろしいのでしょうか?
ご教授よろしくお願いいたします.

A 回答 (5件)

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



> public Form2(Form1 f) でフォームを生成したときには f3 がnullですし、
> public Form2(Form3 f) でフォームを生成したときには f1 がnullなんですけど・・・

これ見て何をすべきなのか気づきませんか?
気づいてないのでしたら、がんばって気づいてください。

#2,#3にも書いてますけど私としてはForm2で直接Form1,Form3のコントロールを操作するのはお勧めしませんので。
    • good
    • 0

>下記のようにForm2にForm1とForm3をパブリック変数を使用し定義していますがエラーになります.



パブリック変数にすればいいというものじゃ・・・
public Form2(Form1 f) でフォームを生成したときには f3 がnullですし、
public Form2(Form3 f) でフォームを生成したときには f1 がnullなんですけど・・・

この回答への補足

そのとおりです.

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

補足日時:2012/05/19 13:28
    • good
    • 0

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);

こんな感じです。
変なところがあったらごめんなさい。
    • good
    • 0

私としてはフォームから別のフォームのコントロールを直接参照や操作をするのはお勧めしないです。


Form1,Form3に行いたい処理のメソッドをつくっておいて
Form2を生成時にイベントハンドラを設定してやって、そこからそれらメソッドを呼ぶのがよいかと思います。
    • good
    • 0

これは、Form2の中のコードでいいのでしょうか?



そうすると、NullReferenceExceptionが出るのは、int Pin1 = f1.butt1;からでしょうかね・・。

その場合、Form1, Form3 をForm2から参照していない為と思われます。

Form2にパブリック変数を作って、Form1, Form3のアドレスをf1に入れてあげればいいのではないかと思います。

この回答への補足

返答遅くなりました.

下記のように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;

補足日時:2012/05/19 00:49
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!