C# 如何将数据从一个表单传递到以前从任何其他表单实例化的另一个表单?

C# 如何将数据从一个表单传递到以前从任何其他表单实例化的另一个表单?,c#,.net,winforms,forms,visual-studio-2012,C#,.net,Winforms,Forms,Visual Studio 2012,我有三个表单(form1,form2,form3),我的主表单是form1,从我打开form2获取一些数据开始,我在form2上有一个更新按钮,它会将我带到form3,现在我想无论用户在form3上写什么都会更新到form2,我如何使用c#.net实现这一点 (我使用showdialog()方法打开了form2和form3) //对form2的引用 Form2 SecondaryForm=新Form2(主窗体) SecondaryForm.ShowDialog(); //在Form2的构造函数中

我有三个表单(form1,form2,form3),我的主表单是form1,从我打开form2获取一些数据开始,我在form2上有一个更新按钮,它会将我带到form3,现在我想无论用户在form3上写什么都会更新到form2,我如何使用c#.net实现这一点

(我使用showdialog()方法打开了form2和form3)

//对form2的引用
Form2 SecondaryForm=新Form2(主窗体)
SecondaryForm.ShowDialog(); //在Form2的构造函数中保存Form1的引用 Form1 Form1=null 表格2(表格1主表格) { form1=主窗体; } //然后,不需要再次创建新的主窗体,只需使用Form1的引用即可 form1.updateText(数据); 这个。关闭()

我已经使用了上面的代码,但是我在form1.updateText(数据)上得到了nullreference异常

在实例化表单3时,只需将表单2引用传递给表单3即可。。与打开form2时对form1所做的操作类似。然后从form3使用form2引用调用updatetext方法,该方法应该是form2上的公共方法

这是所有3个表单的代码,您可以从其他表单更新任何表单,我制作了它,以便您可以访问form3中的form1和form2

using System;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public  Form2 frm2;
        public  Form3 frm3;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        public void updateText()
        {
            this.textBox1.Text = "";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (frm2 == null)
                frm2 = new Form2(this);

                frm2.ShowDialog();
        }
    }
}


using System;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form1 refToForm1;

        public Form2(Form1 f1)
        {
            refToForm1 = f1;
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (refToForm1.frm3 == null)
                refToForm1.frm3 = new Form3(this);

            refToForm1.frm3.ShowDialog();
        }

        public void UpdateForm2(string txt)
    {
        this.textBox1.Text = txt;
    }

    }
}

using System;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form3 : Form
    {
        Form2 refToForm2;
        public Form3( Form2 f2)
        {
            refToForm2 = f2;
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Pass any data to Form1;
            refToForm2.refToForm1.updateText();

            //Pass data to form2
            refToForm2.UpdateForm2("from form3");
        }
    }
}

我刚试过这个。我创建了两个表单,每个表单都有一个
按钮
文本框
。在
表格1中

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form2 SecondaryForm = new Form2(this);
        SecondaryForm.ShowDialog();
    }

    public void updateText(string txt)
    {
        textBox1.Text = txt;
    }
然后在
Form2

    Form1 form1 = null;
    public Form2(Form1 mainForm)
    {
        form1 = mainForm;
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form1.updateText(textBox1.Text);
        this.Close();
    }

我使用了它,它工作了,我没有例外,

,虽然它可能不适合你的数据,也许你可以把你的表单看作是代表所有数据的基础“模型”的“视图”?如果是这样,您可以创建“Model”类的一个实例,并为所有3个表单提供对它的引用。有关“视图”和“模型”的一些解释,请参阅。

显示您的
updateText()
codepublicvoidupdatetext(stringtxt){textbox1.text=txt;}就这些吗?。在方法中显示代码是的,它仅用于获取和设置更新的值我在form1.updateText(数据)处获取的“System.NullReferenceException”;
    Form1 form1 = null;
    public Form2(Form1 mainForm)
    {
        form1 = mainForm;
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form1.updateText(textBox1.Text);
        this.Close();
    }