从2种不同的表格中更改标签

时间:2012-05-05 13:01:44

标签: c# winforms label

按下2个不同的windowsForms上的按钮时,我正在尝试更改标签。

如果我打开第二个表单,我可以轻松更改,但我无法弄清楚如何更改已打开的表单上的数据。我一直在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";

2 个答案:

答案 0 :(得分: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文字的公共属性。

答案 1 :(得分: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;
    }
}

如果您愿意,甚至可以使用活动。它更有神经,但这也会奏效。