我有一个名为“Form1.cs”的表单,它调用一个我们将称为“Class1.cs”的类,以及另一个名为“Form2.cs”的表单。如果 Form2 打开,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");
}
}
}
1 类代码
namespace Test
{
class Class1
{
Form2 cs_form2 = new Form2();
public void Writelog()
{
cs_form2.testTextBox.AppendText("asg");
}
}
}
EDIT: 通过写作new Form2()
,你的代码在Class1
正在创建一个新实例Form2
.
该实例与创建的其他实例没有任何关系Form1
(也可以通过写new Form2()
)实际上是可见的。
你需要给予Class1
的现有实例Form2
,也许使用静态属性(如下所述)。
Pre-Edit
要将文本附加到文本框,您应该调用AppendText
method.
要在之外做到这一点Form2
,你应该做一个public
方法上Form2
那个叫AppendText
.
例如:
partial class Form2 : Form {
...
public void AppendMyText(string text) {
myTextbox.AppendText(text);
}
...
}
要在中调用此方法Class1
,您需要引用Form2
object.
如果你只有一个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;
}
In Class1
(或其他任何地方),然后你可以写
if (Form2.Instance != null)
Form2.Instance.AppendMyText(someString);
请注意,您需要在 UI 线程上执行此操作;如果你在后台线程上运行,你可以调用BeginInvoke
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)