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
上创建一个调用AppendText
的public
方法。
例如:
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
。