我正在尝试将主表单(Form1)上的标签文本从另一个表单(MyForm)更改,但是UI并未更新标签值。
我在做什么错了?
MyForm.cs
private void button1_Click(object sender, EventArgs e)
{
Global Global = new Global();
Global.Hey();
}
Global.cs
public static void Hey()
{
Form1 MainForm = new Form1();
MainForm.ChangeLabel();
}
Form1.cs
public void ChangeLabel()
{
status_label.Text = "HeyHey";
MessageBox.Show(status_label.Text);
// MessageBox : HeyHey, but on UI showing the old value.
}
// MyForm open
private void button_Click(object sender, EventArgs e)
{
MyForm mf = new MyForm();
if (!mf.Visible)
{
mf.Show();
}
else
{
mf.BringToFront();
}
}
答案 0 :(得分:2)
当您单击Form1
上的按钮时,您正在创建一个单独的新MyForm
。您需要将对现有Form1
的引用传递给MyForm
,例如通过构造函数,然后更改该对象上的标签。
它应该看起来像这样。这将绕过Global
类,因为MyForm
直接具有引用。如果要保留Global
类,则必须做类似的事情,向Global
提供对Form1
的引用,并确保Hey
方法使用此方法Form1
个参考。而且,由于您要调用静态方法,因此无需事先实例化新的Global
对象。
MyForm.cs
private Form1 _form;
public MyForm(Form1 form)
{
InitializeComponent();
_form = form;
}
private void button1_Click(object sender, EventArgs e)
{
_form.ChangeLabel();
}
Form1.cs
public void ChangeLabel()
{
status_label.Text = "HeyHey";
MessageBox.Show(status_label.Text);
// MessageBox : HeyHey, but on UI showing the old value.
}
// MyForm open
private void button_Click(object sender, EventArgs e)
{
MyForm mf = new MyForm(this);
if (!mf.Visible)
{
mf.Show();
}
else
{
mf.BringToFront();
}
}