将值从一个表单传递给另一个表单
我有两种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
的信息副本,这是:
当用户单击form2
的save时,信息将进入form2
的局部变量,然后form2
运行一个Event (告诉form1
必须保存其信息)。 在form1
您处理此事件并告诉form1
无论何时从1运行此事件,都必须将form2
的信息复制到自身中。
另一方面,当您再次打开form2
时,您应首先将信息返回给它,然后执行show()
方法。 在此之后你应该处理form2
的shown()
事件,无论何时显示,第一个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; }