2013-06-01 63 views
5

更改文本框中我想从另一个类从另一个类

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方法,但我得到了相同的结果。我搜索了堆栈 溢出,并没有得到任何解决方案的工作。而且有一件事触发了我,如果我加入cout.Show()与弹出的有效textBox1内容相同的表单。这是为什么?

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

回答

10

每次你说新Form1的(),你正在创建形式的不同和单独的实例。相反,您需要在您尝试访问表单的类中创建一个变量。例如,让我们通过它在构造函数中:您访问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);    
    } 

} 

注意:

public void echo(string text) { 
    this.MyForm.textBox1.AppendText(text + Environment.NewLine); 
} 
+0

AHAM,明白了。 你们所有人都给了我正确的答案和解释,为什么会发生这种情况,但是由于nFreeze为此写了解决方案,我会将他的答案标记为正确。谢谢你们! – Dejano

+1

您还必须将“修饰符”更改为文本框的“公开”。 – Hadron

4

的问题是在这里:

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

你正在创建一个新版本的主要形式,Form1的。

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

你有两个选择:

  1. 当您在Form1代码创建类,给他一个实例this,并致电echo方法上提到的Form1(唯一的)实例。

  2. 将这个event添加到这个其他类,这是他想提供一些信息时被解雇。您的Form1代码将在此事件中注册事件处理程序,并在事件触发时自行致电echo

0

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

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() 
} 
1

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

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

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