从另一个类更改文本框
本文关键字:文本 另一个 | 更新日期: 2023-09-27 18:16:29
我试图改变位于
文本框的值public partial class Form1 : Form
来自另一个类的。我试过这样做
public void echo(string text)
{
this.textBox1.AppendText(text + Environment.NewLine);
}
来自另一个类,我把它叫做
Form1 cout = new Form1();
cout.echo("Does this work?");
得到空白输出。我还试图将static
关键字添加到echo
方法中,但我得到了相同的结果。我搜索了stackoverflow,没有找到任何解决方案。触发我的一件事是,如果我添加cout.Show()
,同样的形式弹出有效的textBox1
内容。为什么呢?
为什么不立即显示内容?我该如何解决这个问题?
每次输入new Form1()时,都是在创建该表单的一个不同的独立实例。相反,您需要在试图访问表单的类中创建一个变量。例如,让我们在构造函数中传递它:
public class MyClass {
public Form1 MyForm;
public MyClass(Form1 form){
this.MyForm = form;
}
public void echo(string text) {
this.MyForm.textBox1.AppendText(text + Environment.NewLine);
}
}
请注意,您在echo方法中访问Form1的特定实例:
public void echo(string text) {
this.MyForm.textBox1.AppendText(text + Environment.NewLine);
}
问题就在这里:
Form1 cout = new Form1() ;
cout.echo("Does this work?");
你正在为你的主表单Form1
创建一个新版本。
另一个类是什么,它是如何被实例化的?
你有两个选择:
当你的代码在
Form1
中创建类时,给他一个this
的实例,并在引用Form1
的(唯一)实例时调用你的echo
方法。添加一个
event
到这个其他类,当他想提供一些信息时被触发。您的Form1
代码将在此事件上注册一个事件处理程序,并在事件触发时自己调用echo
。
用MessageBox.Show("Does this work?");
代替cout
现在将文本框值从一个表单发送到另一个表单。
protected void btnNext_Click(object sender, EventArgs e)
{
MyForm2 x = new MyForm2();
x.Query = "My Query"; // here "Query" is your custom public string variable on form2
x.Show()
}
不需要再创建一个Form1的对象
试试这段代码,我想你会猜到发生了什么:
Form1 cout = new Form1();
cout.Show();
cout.echo("Does this work?");
你正在制作一个全新的Form1
。当您调用Show()
时出现的原因是因为您正在显示您所创建的新窗口。我不确定你的实际意图是什么,因为我不知道你从哪里调用这个,但你要做的是调用echo
的Form1
已经创建。