C#标签文本值未更新

时间:2018-09-21 17:52:55

标签: c# winforms user-interface

我正在尝试将主表单(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();
     }

 }

1 个答案:

答案 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();
     }

 }