【问题标题】:c# label text value is not updatingc#标签文本值不更新
【发布时间】: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


【解决方案1】:

当您单击MyForm 上的按钮时,您正在创建一个单独的新Form1。您需要将现有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();
     }

 }

【讨论】:

    猜你喜欢
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多