将值从一个表单传递给另一个表单

我有两种forms,我需要从form1.textbox1传递一个值到form2.variable

Form1中:

string Ed = "", En = ""; public string En1 { get { return En; } set { En = value; } } public string Ed1 { get { return Ed; } set { Ed = value; } } private void button1_Click(object sender, EventArgs e) { Form2 F2 = new Form2(); F2.Show(); F2.textbox1value = Ed; F2.textbox2value = En; } 

`和Form2:

 public string textbox1value { get { return textBox1.Text; } set { textBox1.Text = value; } } public string textbox2value { get { return textBox2.Text; } set { textBox2.Text = value; } } private void button1_Click(object sender, EventArgs e) { Form1 F1 = new Form1(); F1.Ed1 = textBox1.Text; F1.En1 = textBox2.Text; } 

当我在form2上单击“保存”并打开调试时,我看到“ed = 3; en = 5”,但是当我在form1上单击“打开form2”并打开调试时,我看到“Ed = null; En = null;” 并在文本框中显示没有值的空白表单。 请帮忙。

您创建了一个表单,因此旧值将丢失。 默认值为null。

 Form1 F1 = new Form1(); //I'm a new Form, I don't know anything about an old form, even if we are the same type 

您可以使用静态变量,这是存档目标的最简单的解决方案,但还有其他方法,如构造函数,容器,事件等。

 public static string En1 { get { return En; } set { En = value; } } public static string Ed1 { get { return Ed; } set { Ed = value; } } 

而在另一种forms

 private void button1_Click(object sender, EventArgs e) { Form1 F1 = new Form1(); Form1.Ed1 = textBox1.Text; Form1.En1 = textBox2.Text; } 

请注意,静态变量只存在一次类。 因此,如果您有多个实例并且您将静态变量更改为一个,则更改也会影响所有其他实例。

您可以为form2创建constuctor,它接受2个参数并访问这些变量

 Form2 frm2 = new Form2(textBox1.Text,textBox2.Text); frm2.Show(); 

构造函数看起来像

 public Form2(string txt1,string txt2) { InitializeComponent(); textbox1value.Text = txt1; textbox1value.Text=txt2 } 

有许多方法可以在表单之间传递数据

  1) Using constructor 2) Using objects 3) Using properties 4) Using delegates 

有关详细信息, 请查看此链接http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

希望能帮助到你!

调试器没有抱怨什么? 嗯。 也许您可以尝试修改表单1中的button1_click方法,如下所示:

 private void button1_Click(object sender, EventArgs e) { Form2 F2 = new Form2(); Form2.Parent = this; F2.Show(); F2.textbox1value = F2.Parent.Ed; F2.textbox2value = F2.Parent.En; } 

始终在form1保留form2的信息副本,这是:

当用户单击form2save时,信息将进入form2的局部变量,然后form2运行一个Event (告诉form1必须保存其信息)。 在form1您处理此事件并告诉form1无论何时从1运行此事件,都必须将form2的信息复制到自身中。

另一方面,当您再次打开form2时,您应首先将信息返回给它,然后执行show()方法。 在此之后你应该处理form2shown()事件,无论何时显示,第一个form2必须将它所拥有的信息放到相关的文本框等等。

这可以通过在表单2中创建表单1的实例来轻松实现。这是方法之一。

按照步骤:

在表单1中:确保您的控件是公开的。

  eg: txtForm1.Text = "Bangalore"; 

在表格2中:

步骤1:全局创建表单1的实例。 如果在本地创建实例,则无法访问控件包含的值,即使数据已填充到该值,也只返回null值。

第2步:通过Form 1的实例检索控件的值。

  eg: Form1 frm1 = new Form1(); string Form1Value = frm1.txtForm1.Text 

如果您将值描述为静态,则可以直接在Form1中访问它,并且可以从Form2访问它:

 static public string Text_; string PassedValue_=Form1.Text_; 

这个问题可能很旧,但无论如何……

另一种方法是,在form2中有一个构造函数,它接受你要传递给相同类型数据的参数,并且,当单击form1中的按钮时,使用接受的构造函数创建form2的实例参数,并将数据传递给它。

 //Form1 Form2 form2; button1_clic(object sender, eventArgs e) { form2 = new Form2(textbox1.text); form2.Showdialog(); } //Form2 string var = string.empty; public Form2(string val) { InitializeComponents(); var = val; }