C# 将列表框中的PictureBox转换回PictureBox

C# 将列表框中的PictureBox转换回PictureBox,c#,visual-studio,list,listbox,picturebox,C#,Visual Studio,List,Listbox,Picturebox,我的程序中有一些不同颜色的图片框,我想数一数,一种颜色有多少个框。所以我创建了一个函数来计算它: private void cmdCount(object sender, EventArgs e) { int counterWhite, counterRed, counterGreen, counterYellow, counterBlue, counterOrange = 0; if (alreadyAdded == false) {

我的程序中有一些不同颜色的图片框,我想数一数,一种颜色有多少个框。所以我创建了一个函数来计算它:

private void cmdCount(object sender, EventArgs e)
    {
        int counterWhite, counterRed, counterGreen, counterYellow, counterBlue, counterOrange = 0;

        if (alreadyAdded == false)
        {
            lstBox.Items.Add(picA1);
            lstBox.Items.Add(picA2);
            lstBox.Items.Add(picA3);
            //...

            alreadyAdded = true;
        }

        //Log
        String value = Convert.ToString(lstBox.Items.Count);
        lblLog.Text = "Objects in array: " + value;

        for(int i = 0; i < lstBox.Items.Count; i++)
        {
            if(lstBox.Items[i].BackColor == Color.White)
            {
                counterWhite += 1;
            }
            else if...


        }
    }
private void cmdCount(对象发送方,事件参数e)
{
int计数器白色、计数器红色、计数器绿色、计数器黄色、计数器蓝色、计数器橙色=0;
if(alreadyAdded==false)
{
lstBox.Items.Add(picA1);
lstBox.Items.Add(picA2);
lstBox.Items.Add(picA3);
//...
alreadyAdded=true;
}
//日志
字符串值=Convert.ToString(lstBox.Items.Count);
lblLog.Text=“数组中的对象:”+值;
对于(int i=0;i
我知道,我的for循环不会以这种方式工作,但这是我想如何做的基本想法。 我已经把我所有的图片盒都放进了我的列表,在for循环中我想数一数。首先,只要列表很长,它就应该播放,然后每次转到下一个框,检查它的颜色,然后在单独的计数器中添加一个。问题是我每次都会出错,我不知道如何读取列表中每个项目的背景色值


感谢您可能帮助我:)

您收到一个错误,因为
列表框。Items
集合是一个ObjectCollection。。。它必须是,因为它允许你存储任何你想要的对象

在访问对象的属性之前,必须将对象强制转换回
PictureBox

if (((PictureBox)lstBox.Items[i]).BackColor == Color.White)
{
    counterWhite += 1;
}
或者您可以切换到一个
foreach
循环,并一次将它们全部强制转换(使用LINQ):


我认为在这里使用
foreach
更有意义
foreach(在lstBox中的Picturebox-pBox)
然后
pBox.BackColor
。也看不出有什么问题。它说“object”类型的“BackColor”没有定义。我知道这是真的,上面是一个如何做的想法,但我的问题是如何读取列表中对象的背景色,我尝试使用“lstBox.Items[I].BackColor==Color.White”获取它,但它不起作用。那我怎么能读出来呢?
foreach (var pBox in new lstBox.Items.Cast<PictureBox>())
{
    if (pBox.BackColor == Color.White)
    {
        counterWhite += 1;
    }
    ...
}
var counterWhite = Controls.OfType<PictureBox>()
                           .Count(p => p.BackColor == Color.White);

var counterGreen = Controls.OfType<PictureBox>()
                           .Count(p => p.BackColor == Color.Green);