C#:如何将文本附加到类的表单上的文本框中?

我有一个名为“Form1.cs”的表单,它调用一个我们称之为“Class1.cs”的类,以及另一个名为“Form2.cs”的表单。 如果该窗体是打开的,则Class1中的子例程需要更新Form2中的文本框。 文本在附加到文本框中的当前文本后需要显示,以便实时更新。 我无法弄清楚如何使这项工作。 我尝试了很多东西,他们没有给我错误,但他们也没有把文字写入文本框。

这里的每个请求是我当前的代码。 请记住,这是一个测试项目,用于在将其实现到真实之前进行计算。

Form1.cs中的代码

namespace Test { public partial class Form1 : Form { Form2 cs_form2 = new Form2(); Class1 cs_class1 = new Class1(); public Form1() { InitializeComponent(); } public void button1_Click(object sender, EventArgs e) { cs_class1.Writelog(); } private void Form1_Load(object sender, EventArgs e) { cs_form2.Show(); } public void writeToTextbox() { i = 0; while(i<=10) { cs_form2.testTextBox.AppendText("still works"); i++; } } } } 

Form2.cs中的代码

 namespace Test { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void clear_Click(object sender, EventArgs e) { testTextBox.Text = ""; } public void AppendText() { testTextBox.AppendText("asklvhslieh"); } } } 

Class1中的代码

 namespace Test { class Class1 { Form2 cs_form2 = new Form2(); public void Writelog() { cs_form2.testTextBox.AppendText("asg"); } } } 

编辑 :通过编写new Form2() ,您的代码在Class1中创建一个新的Form2实例。
此实例与在Form1创建的其他实例(也通过编写new Form2() )没有任何关系,这实际上是可见的。
您需要为Class1提供Form2的现有实例,可能使用静态属性(如下所述)。


预编辑

要将文本附加到文本框,您应该调用AppendText方法。

要在Form2之外执行此操作,您应该在Form2上创建一个调用AppendTextpublic方法。

例如:

 partial class Form2 : Form { ... public void AppendMyText(string text) { myTextbox.AppendText(text); } ... } 

要在Class1调用此方法,您需要对Form2对象的引用。
如果您一次只有一个Form2 ,则可以创建一个静态属性,如下所示:

 partial class Form2 : Form { static Form2 instance; public static Form2 Instance { get { return instance; } } protected override void OnShown(EventArgs e) { base.OnShown(e); instance = this; } protected override void OnClosed(EventArgs e) { base.OnClosed(e); instance = null; } 

Class1 (或其他任何地方)中,您可以编写

 if (Form2.Instance != null) Form2.Instance.AppendMyText(someString); 

请注意,您需要在UI线程上执行此操作; 如果您在后台线程上运行,则可以调用BeginInvoke