C# Текстовое поле формы не обновляется sh при применении значения из класса - PullRequest
0 голосов
/ 08 мая 2020

Я создал новый проект формы Windows в Visual Studio. В этом проекте я создаю новый класс, чтобы поместить в него весь свой код.

В моем Form1.cs я вызываю свой класс следующим образом:

 MyNewClass mnc = new MyNewClass();

В моем коде кнопки, Я помещаю что-то вроде этого:

 mnc.MyMethods();

В моем классе я вызываю свою форму так:

 Form1 form1 = new Form1();

В своих методах я сделал этот код:

 form1.MyTextBox.Text = "Salut toi";
 form1.Refresh();

Но в моей форме ничего не появляется.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Методы MyClass создают новую форму Form1 и используют ее. Они не взаимодействуют с экземпляром Form1, который отображается на экране.

Вот (не очень хорошая) текстовая диаграмма информационного потока.

Form1 formOnScreen - - -> MyClass myClass - - -> Form1 newForm

Вы хотите, чтобы MyClass вызывал методы в экземпляре Form1, который находится на экране. Для этого ему нужна ссылка на этот Form1. Вы можете предоставить ему экземпляр Form1, передав его в качестве параметра в методах, которые вы вызываете в MyClass, передав его в конструктор MyForm и сохранив экземпляр как поле, создав свойство в MyClass и установив его после создание экземпляра MyClass или любым другим способом.

0 голосов
/ 08 мая 2020

Вы создаете экземпляр MyNewClass в Form1, но в MyMethods() вы создаете новый экземпляр MyNewClass и пытаетесь обновить значения нового экземпляра.
Одним из решений является передача ссылки Form1 на MyMethods() вот так:

public void MyMethods(Form1 form1)
{
 form1.MyTextBox.Text = "Salut toi";
}

А затем в своем Form1.cs вы пишете следующий код:

 MyNewClass mnc = new MyNewClass();
 mnc.MyMethods(this);

Вам нужно только убедиться, что MyTextBox не private. Вы можете сделать это public, изменив это в Form1.Designer.cs или используя конструктор и изменив свойство Modifiers на public.

...