按下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";
答案 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;
}
}
如果您愿意,甚至可以使用活动。它更有神经,但这也会奏效。