我正在尝试更改位于
中的文本框的值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
方法,但我得到了相同的结果。我搜索了Stack Overflow并没有得到任何解决方案。有一件事会触发我,如果我添加cout.Show()
相同的表单会弹出有效的textBox1
内容。那是为什么?
为什么不立即显示内容?我该如何解决这个问题?
答案 0 :(得分:11)
每次您说新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);
}
答案 1 :(得分:4)
问题在于:
Form1 cout = new Form1() ;
cout.echo("Does this work?");
您正在创建主表单的{em>新版本Form1
。
这是什么其他课程,以及如何实例化?
您有两种选择:
当您Form1
中的代码创建该类时,请向this
提供一个实例,并在该引用上调用您的echo
方法{唯一的} { {1}}。
将Form1
添加到此另一个类中,当他想提供某些信息时会触发该类。您的event
代码会在此事件中注册一个事件处理程序,并在事件触发时自己调用Form1
。
答案 2 :(得分:1)
而不是cout
尝试使用MessageBox.Show("Does this work?");
现在将文本框值从一个表单发送到另一个表单。
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()
}
答案 3 :(得分:1)
您不需要创建Form1的另一个对象。
尝试使用此代码,我想,你会猜到发生了什么:
Form1 cout = new Form1();
cout.Show();
cout.echo("Does this work?");
答案 4 :(得分:0)
你正在制作一个全新的Form1
。当您拨打Show()
时出现的原因是因为您正在显示您已制作的新窗口。我不确定你的实际意图是什么,因为我不知道你从哪里调用它,但你要做的是为{{1}调用echo
已经创建了。