从另一个类更改文本框

时间:2013-06-01 21:27:28

标签: c# .net winforms textbox

我正在尝试更改位于

中的文本框的值
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内容。那是为什么?

为什么不立即显示内容?我该如何解决这个问题?

5 个答案:

答案 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

这是什么其他课程,以及如何实例化?

您有两种选择:

  1. 当您Form1中的代码创建该类时,请向this提供一个实例,并在该引用上调用您的echo方法{唯一的} { {1}}。

  2. 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已经创建了。