C#:如何将类中的文本附加到表单上的文本框中?
我有一个名为“Form1.cs”的表单,它调用一个类,我们称之为“Class1.cs”,还有另一个表单名为“Form2.cs”。如果Form2中的文本框处于打开状态,则Class1中的子例程需要更新该文本框。文本需要在添加到文本框中的当前文本后显示,以便实时更新。我不知道该怎么做。我尝试了很多方法,他们没有给我错误,但是他们也没有把文本写入文本框 这里的每个请求都是我的当前代码。请记住,这是一个测试项目,用于在将其实现到实际项目中之前弄清楚这一点 Form1.cs中的代码C#:如何将类中的文本附加到表单上的文本框中?,c#,winforms,C#,Winforms,我有一个名为“Form1.cs”的表单,它调用一个类,我们称之为“Class1.cs”,还有另一个表单名为“Form2.cs”。如果Form2中的文本框处于打开状态,则Class1中的子例程需要更新该文本框。文本需要在添加到文本框中的当前文本后显示,以便实时更新。我不知道该怎么做。我尝试了很多方法,他们没有给我错误,但是他们也没有把文本写入文本框 这里的每个请求都是我的当前代码。请记住,这是一个测试项目,用于在将其实现到实际项目中之前弄清楚这一点 Form1.cs中的代码 namespace T
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++;
}
}
}
}
1类代码
namespace Test
{
class Class1
{
Form2 cs_form2 = new Form2();
public void Writelog()
{
cs_form2.testTextBox.AppendText("asg");
}
}
}
EDIT:通过编写
newform2()
,您在Class1
中的代码正在创建Form2
的新实例此实例与在实际可见的
Form1
(也通过写入newform2()
)中创建的另一个实例没有任何关系。您需要为
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
如果你有不起作用的代码,如果你把它放在你的帖子里,它会非常有用。。。最好是作为一个简短但完整的例子。我如何准确地将Form1打开的当前Form2赋给“Class1”类?@Bryan:您可以在Class1的构造函数中传递对它的引用,或者在Class1上设置属性,或者,正如SLaks建议的那样,有一个静态属性,其中包含对它的引用。同样,不理解您的意思,请给出示例。公共静态Form2实例{get;private set;}给我一个错误,说必须声明一个主体,因为它没有标记为抽象或外部。我应该在出发和出发后放什么?
if (Form2.Instance != null)
Form2.Instance.AppendMyText(someString);