0

2 つの異なる windowsForms のボタンを押すと、ラベルを変更しようとしています。

2 番目のフォームを開くと簡単に変更できますが、既に開いているフォームのデータを変更する方法がわかりません。私は取得し続けNullRefferenceExecptionます。

Form1これは、ボタンとボタンで使用するコードですForm2

public Form2 m_Form2;

m_Form2 = new Form2();
m_Form2.Show();
m_Form2.label1.Text = "pressed on form 1";

と:

public Form1 m_Form1;

m_Form1.label1.Text = "pressed on form 2";
4

2 に答える 2

1

コントロールを非公開にして、作成したフォームからのみアクセスできるようにします。フォームの参照を使用して、フォームにアクセスします。(各フォームで)ボタンを押すだけで、フォームからフォームにデータを渡す方法を簡単に説明します。

class Form1
{
    Form2 f2;
    private void buttonOpenForm2_Click(object sender, EventArgs e) 
    {
        f2 = new Form2(this);
        f2.Show();
    }

    private void SayHiOnForm2_Click(object sender, EventArgs e) 
    {
        if(f2 != null)
           f2.DataFromForm2("Hello from form 1.");
        else
           MessageBox.Show("Form2 is not yet opened.");
    }

    public void DataFromForm2(stirng message)
    {
        this.label1.Text = message;
    }
}

//on form2:
class Form2
{
    Form1 f1;
    public Form2(Form1 _f1)
    {
        InitilaizeComponent();
        this.f1 = _f1;
    }

    private void SayHiOnForm1_Click(object sender, EventArgs e) 
    {
        f1.DataFromForm2("Hello from form 2.");
    }

    public void DataFromForm1(stirng message)
    {
        this.label1.Text = message;
    }
}

必要に応じて、イベントを使用することもできます。それはもっとニートですが、これもうまくいくでしょう。

于 2012-05-05T13:18:25.760 に答える
1

たとえば、コンストラクターを介して、Form1への参照を渡す必要があります。Form2

public Form2 m_Form2;
m_Form2 = new Form2(this);
m_Form2.Show();

フォーム 2:

public Form2(Form1 form1)
{
    this.m_Form1 = form1;
}

public Form1 m_Form1;

どこか:

m_Form1.label1.Text = "pressed on form 2";

ただしlabel1、公開する必要があるか、label1のテキストを取得/設定する公開プロパティを提供する必要があります。

于 2012-05-05T13:08:04.423 に答える