2012-05-05 12 views
0

2つの異なるウィンドウフォームのボタンを押したときにラベルを変更しようとしています。2つの異なるフォームからラベルを変更します

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

これは私がForm1Form2に私のボタンに使用したコードです:

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"; 
+1

'NullReferenceException'はどの行から得られますか? – ChrisF

+1

フォームのいずれかの*インスタンス*の 'label1'プロパティにアクセスする必要があります。 * type *のプロパティを単純に変更することはできません。 –

答えて

1

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

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のテキスト。

1

コントロールを非公開にすると、作成されたフォームからのみアクセスできます。フォームの参照を使用して、あるフォームにアクセスします。 私はsimplier形成するために、フォームからのデータを渡す方法(フォームのそれぞれに)ボタンを押すにあなたが表示されます:

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

あなたがしたい場合でも、イベントを使用することができます。そのより多くのneetが、これも動作します。

関連する問題