我有一个名为“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");
}
}
}
答案 0 :(得分:4)
编辑:通过撰写new Form2()
,Class1
中的代码正在创建Form2
的新实例。
此实例与Form1
中创建的其他实例(也通过编写new Form2()
)无关,实际上可见。
您需要Class1
现有的Form2
实例,可能使用静态属性(如下所述)。
要将文字附加到文本框,您应该调用AppendText
方法。
要在Form2
之外执行此操作,您应该在调用public
的{{1}}上设置Form2
方法。
例如:
AppendText
要在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
请注意,您需要在UI线程上执行此操作;如果您在后台线程上运行,则可以调用if (Form2.Instance != null)
Form2.Instance.AppendMyText(someString);
。