2012-05-05 42 views
0

我試圖在按下2個不同windowsForms上的按鈕時更改標籤。更改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

你需要通過構造函數的Form1參考傳遞給Form2,例如:

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

in Form 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,但這也會起作用。