【发布时间】:2018-09-21 17:52:54
【问题描述】:
我正在尝试从另一个表单 (MyForm) 更改主表单 (Form1) 上的标签文本,但 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();
}
}
【问题讨论】:
-
这一行:
Form1 MainForm = new Form1();正在创建一个 new 表单,因此当您调用MainForm.ChangeLabel();时,您正在更改该新表单上的标签,而不是当前的表单可见的。尝试如下更改您的Hey方法:public static void Hey(Form1 form),然后在方法内部调用form.ChangeLabel(this);并删除创建表单的代码。 -
每次单击按钮时,都会创建一个新的
Form1,与显示的不同,并更改此新隐藏表单上的标签。要在已经显示的表单上更改它,您需要对该特定对象的引用。
标签: c# winforms user-interface