将值从一种形式传递给另一种形式

时间:2013-11-25 07:18:01

标签: c# winforms

我有两种形式,我需要将一个值从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 ;”并在文本框中显示没有值的空白表单。求助。

7 个答案:

答案 0 :(得分:12)

您创建了表单,因此旧值将丢失。默认值为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; }
}

另一种形式

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

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

答案 1 :(得分:8)

您可以为form2创建接受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

希望它有所帮助!

答案 2 :(得分:0)

调试器没有抱怨什么?嗯。 也许你可以尝试修改表单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;
}

答案 3 :(得分:0)

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

当用户点击form2上的保存时,信息会显示在form2的本地变量中,然后form2会运行事件(告诉form1必须保存其信息)。在form1处理此事件并告诉form1每当运行此事件时,from1必须复制{{1}的信息进入自己。

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

答案 4 :(得分:0)

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

按照以下步骤操作:

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

    eg: txtForm1.Text = "Bangalore";  

表格2:

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

第2步:按表单1的实例检索控件的值。

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

答案 5 :(得分:0)

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

method

答案 6 :(得分:0)

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

另一种方法是,在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;
}