Текстовое значение метки c # не обновляется - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь изменить текст метки в основной форме (Form1) из другой формы (MyForm), но пользовательский интерфейс не обновляет значение метки.

Что я делаю не так?

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 голосов
/ 21 сентября 2018

Вы создаете отдельную новую 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();
     }

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...