从另一个类更改文本框

我正在尝试更改位于的文本框的值

public partial class Form1 : Form 

来自另一个class级。 我尝试过这样的事情

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

从另一个课我称之为

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

我得到空白输出。 我也尝试将static关键字添加到echo方法中,但我得到了相同的结果。 我搜索了Stack Overflow并没有得到任何解决方案。 有一件事触发了我,如果我添加cout.Show()相同的表单弹出有效的textBox1内容。 这是为什么?

为什么它不立即显示内容? 我该如何解决这个问题?

每次您说新的Form1()时 ,您都在创建该表单的独特且独立的实例。 相反,您需要在尝试访问表单的类中创建一个变量。 例如,让我们在构造函数中传递它:

 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); } } 

请注意,您在echo方法中访问Form1的特定实例:

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

问题出在这里:

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

您正在创建主窗体的版本Form1

什么是这个其他类,它是如何实例化的?

你有两个选择:

  1. Form1的代码创建类时,给他一个实例,并在对Form1 (唯一的)实例的引用上调用echo方法。

  2. 向另一个类添加一个event ,当他想提供一些信息时会触发该event 。 您的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的另一个对象。

尝试这个代码,我想,你会猜到发生了什么:

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

你正在制作一个全新的Form1 。 调用Show()时出现的原因是因为您正在显示您创建的新窗口。 我不确定你的实际意图是什么,因为我不知道你在哪里调用它,但是你想要做的是为已经创建的Form1调用echo