8

我正在尝试更改位于

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内容。这是为什么?

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

4

5 回答 5

12

每次您说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);
}
于 2013-06-01T21:35:57.480 回答
4

问题在这里:

Form1 cout = new Form1() ;
cout.echo("Does this work?");

您正在创建主窗体的版本,Form1.

这个其他类是什么,它是如何被实例化的?

你有两个选择:

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

  2. 向这个其他类添加一个event,当他想提供一些信息时会触发它。您的Form1代码将在此事件上注册一个事件处理程序,并echo在事件触发时对自己进行调用。

于 2013-06-01T21:31:18.183 回答
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()
}
于 2013-06-01T21:32:40.270 回答
1

您不需要创建 Form1 的另一个对象。

试试这段代码,我想,你会猜到发生了什么:

Form1 cout = new Form1();
cout.Show();
cout.echo("Does this work?");
于 2013-06-01T21:34:04.897 回答
0

你正在制作一个全新的Form1. 打电话时出现的原因Show()是因为您正在显示您创建的新窗口。我不确定你的实际意图是什么,因为我不知道你从哪里调用它,但你想要做的是调用echo已经Form1创建的。

于 2013-06-01T21:32:11.470 回答