0

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

如果我打开第二个表单,我可以轻松更改它,但我无法弄清楚如何更改已经打开的表单上的数据。我不断得到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

您需要传递 to 的引用Form1Form2例如通过构造函数:

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 回答
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 回答