从 2 种不同的表单更改标签

本文关键字:表单 标签 | 更新日期: 2023-09-27 18:33:13

我正在尝试在按下 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";

从 2 种不同的表单更改标签

您需要将 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文本的公共属性。

保持控件私有,以便只能从创建的窗体访问它们。使用表单的引用来访问某些表单。我将通过按下按钮(在每个表单中(向您展示如何将数据从表单传递到表单简化器:

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

如果需要,您甚至可以使用事件。它更整洁,但这也会起作用。