GUI-C#PictureBox列表以新形式重新加载

GUI-C#PictureBox列表以新形式重新加载,c#,forms,list,picturebox,C#,Forms,List,Picturebox,我有一个表单,它创建了一个picturebox并将其插入到一个静态列表中。我有另一个表单,可以访问列表并使用以下代码将其添加到控件中: foreach (var pb in Program.pbList) { if (!this.Controls.Contains(pb)) { this.Invoke(new MethodInvoker(delegate() { this.Controls.Add(pb);

我有一个表单,它创建了一个picturebox并将其插入到一个静态列表中。我有另一个表单,可以访问列表并使用以下代码将其添加到控件中:

foreach (var pb in Program.pbList)
{
    if (!this.Controls.Contains(pb))
    {
        this.Invoke(new MethodInvoker(delegate()
        {
            this.Controls.Add(pb);
            this.Invalidate();
            this.Update();
            this.Refresh();
        }));
    }
}
但是它没有出现在新表单上

更新:

PictureBox pBox = new PictureBox();
pBox.Size = new Size(this.Size.Width / 14, this.Size.Width / 12);
pBox.BackColor = System.Drawing.Color.Aqua;
pBox.Visible = true;
pBox.Location = pb.Location;
this.Controls.Add(pBox);
this.Refresh();
但是表单一直保持刷新,没有显示我的picturebox

额外:

public static List<PictureBox> pbList = new List<PictureBox>(); //Is in Program.cs

不可能重用控件,因为无论何时释放所属窗体,控件都会被释放

这就意味着他们再也不会渲染了。永远


创建一个图像列表,并每次重新创建控件。

我认为您无法做到这一点。因为C#无法重用控件,因为每当表单被dispose时,系统都会转储该控件

,所以需要提供更多的代码。。另一种形式看起来像什么。。?您还可以显示pbList的定义位置和定义方式。。还有程序..这个.Invoke()是一个非常重要的代码味道。这可能意味着您在错误的线程上创建了窗口,但无法看到它,因为该线程没有泵送消息循环。无论您在做什么,都可能需要更早地调用表单对象,以便在UI线程上创建表单对象。请记住,一个控件只能有一个父控件,因此将其添加到新窗体会将其从原始窗体中删除。@StepCode显示所有相关的代码是什么阻止您向我们显示您可能出错的地方。?只需在另一个窗体中创建对该列表的引用,您就可以将其拉出并添加到该窗体中。。如何创建对其他表单上任何数据项的引用?这里有大约10万亿篇关于这个的帖子..我很抱歉,它将它添加到列表程序中.pbList.Add(pBox);我该怎么做?对不起,我对表格不是很在行。我遇到了一个类似这样的异常,因此我让窗体运行Hide(),这会有什么不同吗?隐藏不会处理控件,所以是的,这会起到一些作用。如果您真的想重用图像,请在每次打开新表单时创建一个图片框。OP没有说PBs显示在第一个表单中,只是创建并放入列表。它们是在哪个线程上创建的?它们是在一个表单上创建的,添加到表单中,还是为了重用而添加到列表中?是的,列表是这样的,我可以在另一个表单中访问它。
PictureBox pBox = new PictureBox();
pBox.Size = new Size(this.Size.Width / 14, this.Size.Width / 12);
pBox.BackColor = System.Drawing.Color.Aqua;
pBox.Visible = true;
pBox.Location = new Point(390, 100);
Program.pbList.Add(pBox);
this.Controls.Add(pBox);