从另一个类更改文本框

本文关键字:文本 另一个 | 更新日期: 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创建一个版本。

另一个类是什么,它是如何被实例化的?

你有两个选择:

  1. 当你的代码在Form1中创建类时,给他一个this的实例,并在引用Form1的(唯一)实例时调用你的echo方法。

  2. 添加一个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()时出现的原因是因为您正在显示您所创建的新窗口。我不确定你的实际意图是什么,因为我不知道你从哪里调用这个,但你要做的是调用echoForm1已经创建。