在表单之间传递列表并在表单末尾添加

时间:2017-01-03 10:03:47

标签: c# winforms

我想在Form2中创建一个列表_Buffer,其中的数据来自Form3Form4Form5Form6Form7和{ {1}}。如果我尝试添加Form8中创建的另一个列表中的其他元素,我已经使它工作但只有1个表格,例如我已经从Form4添加... Form3将告诉我只有来自Form2的元素没有我之前添加的Form4元素。我是这样做的:

Form3的代码:

Form2

ListArticle _Buffer = new ListArticle(); public void SetData(ListArticle article) { _Buffer = article; } 的代码:

Form3

注意:public ListArticle _articles = new ListArticle(); public ListArticle Articles { get { return _articles; } set { _articles = value; } } foreach (Color color in dominantColours) { MessageBox.Show(closestColor2(clist, color)); tshirt_number++; _articles.Clothes.Add("T-shirt " + tshirt_number.ToString()); _articles.Colors.Add(closestColor2(clist, color)); Console.WriteLine("K: {0} (#{1:x2}{2:x2}{3:x2})", color, color.R, color.G, color.B); string hex = color.R.ToString("X2") + color.G.ToString("X2") + color.B.ToString("X2"); } 会返回closestColor2;

以下是我如何将它们添加到string中的列表:

Form2

Form2 frm = new Form2(); frm.Show(); Articles = _articles; frm.SetData(Articles); this.Hide(); 代码与Form3中的代码非常相似..只是另一个列表。

以下是Form4类:

ListArticle

所以基本上我想在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>(); } } 中添加的元素末尾添加我在Form4中添加的元素。

2 个答案:

答案 0 :(得分:1)

在您的问题中,您提到Form4代码与Form3”中的代码非常相似。

然而在Form3中,您创建了一个新的ListArticle:public ListArticle _articles = new ListArticle();如果您在Form4和其他表单上执行相同操作,那么每个表单都会覆盖您的列表。每个表单都会创建自己的新列表。

我认为您要做的是在主程序Buffer上而不是在Form2上创建一个公共Program.cs字段。像这样:

static class Program
{
    public ListArticle Buffer = new ListArticle(); // Add this line

    static void Main()
    ....
}

通过这种方式,您可以使用Program.Buffer从每个表单访问您的缓冲区。

您可以在每个表单中向缓冲区添加新文章,如下所示:

Program.Buffer.Clothes.Add(...)
Program.Buffer.Colors.Add(...)

答案 1 :(得分:0)

用这条线......

_Buffer = article;

...您正在使用新列表替换您之前的列表。显然,前一个列表中的所有条目都在此过程中丢失。您需要添加新列表的条目:

if (_Buffer == null) {
    _Buffer = new ListArticle();
}
_Buffer.Clothes.AddRange(article.Clothes);
_Buffer.Colors.AddRange(article.Colors);