从 2 种不同的表单更改标签
本文关键字:表单 标签 | 更新日期: 2023-09-27 18:33:13
我正在尝试在按下 2 个不同窗口窗体上的按钮时更改标签。
如果我打开第二个表单,我可以轻松更改它,但我无法弄清楚如何更改已经打开的表单上的数据。我一直在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";
您需要将 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;
}
}
如果需要,您甚至可以使用事件。它更整洁,但这也会起作用。