将表单从Form3传递到Form1

时间:2016-12-28 21:07:28

标签: c# winforms

我有3个表单:form1(我想使用我在其中创建List并添加内容的form3中的List),form2(其中包含一个返回form1的按钮和一个返回form3的按钮,获取列表中的值。

我尝试创建以下类:

public class ListArticle
    {
        public List<string> Clothes { get; private set; }
        public List<string> Colors { get; private set; }

        public ListArticle()
        {
            Clothes = new List<string>();
            Colors = new List<string>();
        }
    }

然后声明尝试从form3添加列表中的东西,如下所示:

//这是宣言

public ListArticle _articles = new ListArticle();

    public ListArticle Articles
    {
        get
        {
            return _articles;
        }
        set
        {
            _articles = value;
        }
    }

这是我添加的方式:

_articles.Clothes.Add("T-shirt " + tshirt_number.ToString());
_articles.Colors.Add(closestColor2(clist, color));

这就是我试图获取值的方式:

当我关闭form3

我这样做:

Form2 frm = new Form2();
frm.Show();
Articles = _articles;
this.Hide();

在form2中我什么都不做..

并且在form1中我尝试这样做:

//声明

public ListArticle Articles;

public ListArticle _articles
{
   get
   {
     return Articles;
   }
   set
   {
     Articles = value;
   }
}

//这就是我尝试的方法,但每次都会返回null。

private void button3_Click(object sender, EventArgs e)
    {
        try
        {
            Form3 f = new Form3();

            f.Articles = Articles;

            foreach (string c in Articles.Clothes)
            {
                MessageBox.Show(c);
            }
        }
        catch 
        {
            MessageBox.Show("Articles is null.");
        }

    }

1 个答案:

答案 0 :(得分:0)

如果您希望能够在所有表格之间分享文章,您可以将衣服和颜色系列设为静态:

public class ListArticle
{
    public static List<string> Clothes { get; private set; }
    public static List<string> Colors { get; private set; }

    static ListArticle()
    {
        Clothes = new List<string>();
        Colors = new List<string>();
    }
}

然后,您可以通过以下形式添加文章:

ListArticle.Clothes.Add("T-shirt " + tshirt_number.ToString());
ListArticle.Colors.Add(closestColor2(clist, color));

...并从另一个表单中检索文章:

private void button3_Click(object sender, EventArgs e)
{
    try
    {
        foreach (string c in ListArticle.Clothes)
        {
            MessageBox.Show(c);
        }
    }
    catch
    {
        MessageBox.Show("Articles is null.");
    }
}

使用此方法,您无需在任何一种表单中创建任何其他“文章”属性。您只需从所有表单访问相同的静态集合。