C# 将列表从表格3传递到表格1

C# 将列表从表格3传递到表格1,c#,winforms,C#,Winforms,我有3个表单:form1(我想使用我从form3创建列表并向其中添加内容的列表)、form2(包含返回form1的按钮和转到form3并向列表中获取值的按钮) 我尝试创建以下类: public class ListArticle { public List<string> Clothes { get; private set; } public List<string> Colors { get; private set; }

我有3个表单:form1(我想使用我从form3创建列表并向其中添加内容的列表)、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>();
        }
    }
我是这样补充的:

_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();
在表格2中我什么也不做

在表格1中,我试着这样做:

//声明

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.");
        }

    }

如果您希望能够在所有表单之间共享文章,可以将衣服和颜色集合设置为静态:

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.");
    }
}

使用这种方法,您不必创建任何附加的“文章”属性。您只需访问所有表单中相同的静态集合。

您昨天问了一个类似的问题,这个问题仍然没有解决。您需要了解更多有关如何在表单之间进行通信的信息,所以请花一些时间阅读链接帖子。@RezaAghaei我知道,但我觉得我提供的关于我真正了解的内容的信息太少了想问一个完整的问题并重新制作一个有答案的问题是不好的。@RezaAghaei也..我一整天都在努力研究这个问题,但没能弄明白,现在我很难过
Form3 f=new Form3();f.Articles=Articles;
→ 1) 您创建了一个新的
Form3
2)实例,将
Form1
Articles
分配给
Form3
Articles
。3) 在
Form1
中,您没有实例化
Articles
,因此它显然是空的。
private void button3_Click(object sender, EventArgs e)
{
    try
    {
        foreach (string c in ListArticle.Clothes)
        {
            MessageBox.Show(c);
        }
    }
    catch
    {
        MessageBox.Show("Articles is null.");
    }
}