Изменение текстового поля из другого класса

я пытаюсь изменить значение текстового поля, расположенного в

public partial class Form1 : Form

из другого класса. Я'мы пробовали что-то вроде этого

public void echo(string text)
{
    this.textBox1.AppendText(text + Environment.NewLine);
}

Из другого класса яЯ называю это как

Form1 cout = new Form1();
cout.echo("Does this work?");

И я получаю пустой вывод. Я также попытался добавитьstatic ключевое слово дляecho метод, но я получил тот же результат. Я искал по стекуПереполнение и нене получить никакого решения для работы. И одна вещь, которая вызывает меня, если я добавлюcout.Show() та же самая форма выскакивает с действительнымtextBox1 содержание. Это почему?

Почему он не показывает контент сразу? И как мне это исправить?

Ответы на вопрос(5)

Проблема здесь:

Form1 cout = new Form1() ;
cout.echo("Does this work?");

Вы'воссозданиеновый версия вашей основной формы.Form1

Что это за другой класс, и как он создается?

У вас есть два варианта:

Когда ваш код вForm1 создает класс, дать ему экземплярthisи позвонитеecho метод по этой ссылке на (единственный) экземпляр.Form1

Добавитьevent для этого другого класса, который увольняется, когда он хочет предоставить некоторую информацию. ВашForm1 код зарегистрирует обработчик события для этого события и сделает вызовecho Сам, когда событие происходит.

Вы'делает совершенно новыйForm1, Причина одна появляется, когда вы звонитеShow() потому что вы показываете новое окно, которое вымы сделали. Я'Я не уверен, каково ваше истинное намерение, потому что я нене знаю где тыВы звоните это от, но то, что вы хотите сделать, это позвонитьecho дляForm1 это уже было создано.

Вместоcout попробуйте использоватьMessageBox.Show("Does this work?");

Теперь отправляем значение текстового поля из одной формы в другую.

protected void btnNext_Click(object sender, EventArgs e)
{
  MyForm2 x = new MyForm2();
  x.Query = "My Query";   // here "Query" is your custom public string variable on form2
  x.Show()
}
Решение Вопроса

Каждый раз, когда вы говоритеновый Form1 ()Вы создаете отдельный и отдельный экземпляр этой формы. Вместо этого вам нужно создать переменную в классе, который вы пытаетесь получить доступ к вашей форме. Например, пустьs передать его в конструкторе:

public class MyClass {
    public Form1 MyForm;

    public MyClass(Form1 form){
        this.MyForm = form;
    }

    public void echo(string text) {
        this.MyForm.textBox1.AppendText(text + Environment.NewLine);            
    }

}

Обратите внимание, что вы обращаетесь к конкретному экземпляру Form1 в вашем методе echo:

public void echo(string text) {
     this.MyForm.textBox1.AppendText(text + Environment.NewLine);
}
 Dejano01 июн. 2013 г., 23:48
Ахам, понял. Все вы, ребята, дали мне правильный ответ и объяснение, почему это происходит, но так как nFreeze написал решение, яотмечу его ответ как правильный. Спасибо вам всем!
 Hadron04 нояб. 2015 г., 02:19
Вы также должны изменитьмодификаторы» к "Открытый» для текстового поля.

Ты неНе нужно создавать еще один объект Form1.

Попробуйте этот код, и я думаю, вы догадаетесь, что происходит:

Form1 cout = new Form1();
cout.Show();
cout.echo("Does this work?");

Ваш ответ на вопрос