将数据从两个winform传递到第三个winform c#

时间:2016-09-05 07:13:33

标签: c# forms winforms

我有三种不同的窗体形式。第一个是主窗体,它通过按钮单击事件打开第二个窗体。在此表单上,用户选择可以单击关闭第二个表单的项目并打开第三个表单,其中用户需要输入在第二个表单上单击的项目用户的数量。现在我的要求是从第二个表单中检索项目名称和从第三个表单中检索数量,并将其显示在第一个表单的列表视图中。从表单2获取项目名称并将其传递给第一个表单这里是我的代码:

public partial class Form1 : Form
{
public string Item { get; set; }
}

public partial class Form2 : Form
{
 Form1 form = new Form1();
 form.Item = ((sender as Button).Text);
}

但是由于第二个表单上的click事件关闭了这个表单并打开了第三个表单,这个值消失了,我相信它是由垃圾收集器处理的。(请原谅我的术语,如果它的错误)所以我只能从第三个表单中检索数量值使用与上述相同的方法。有没有办法可以实现这一点而不会失去第二种形式的价值,或者我对此完全错了?

1 个答案:

答案 0 :(得分:0)

正如Mohit所说,拥有这么多形式的设计不是很好,但如果你绝对需要使用这样的设计,我会使用构造函数注入并将父表单传递给子进程,以便您可以访问公共成员,如添加/设置所选项目和金额的属性或方法,这就是我在代码中的含义:

public partial class Form1 : Form
{
    public string Item { get; set; }
}
public partial class Form2 : Form
{
    public string Item { get; set; }

    private Form1 parent;
    public Form2(Form1 parentForm) 
    {
        parent = parentForm;
        // example
        parent.Item = "myText";
    }
    // ... now you can access any public member in your parent form here
}
public partial class Form3 : Form
{
    private Form1 greatParent;
    private Form2 parent;
    public Form3(Form1 greatParentForm, Form2 parentForm) 
    {
        greatParent = greatParentForm;
        parent = parentForm;
        // examples
        greatParent.Item = "myText";
        parent.Item = "myText";
    }
    // ... now you can access any public member in your parent and greatparent forms here
}

你应该引入一个类似接口或类似的抽象层,并且有更好的方法来解决你的问题,但这是最基本的解决方案,可以让你获得控制和灵活性。