首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PictureBox内的listBox转换回PictureBox

将PictureBox内的listBox转换回PictureBox
EN

Stack Overflow用户
提问于 2014-07-29 11:55:38
回答 1查看 223关注 0票数 1

我的程序中有一些不同颜色的PictureBoxes,我想数一下,一种颜色有多少个盒子。所以我创建了一个函数来计数它:

代码语言:javascript
复制
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...


        }
    }

我知道,我的for-循环不会那样工作,但这是我想要做的基本想法。我已经把我所有的PictureBoxes都放进了我的列表中,在for循环中我想对它们进行计数。首先,它应该播放只要列表是长的,然后每次它转到下一个框,应该检查它的颜色,然后添加一个到单独的计数器。问题是,我每次都会收到错误,我不知道如何读取列表中每一项的BackColors值。

谢谢你也许能帮我:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-29 12:14:33

因为ListBox.Items集合是ObjectCollection,所以您得到了一个错误..。它必须是,因为它允许您存储任何您想要在其中的对象。

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

代码语言:javascript
复制
if (((PictureBox)lstBox.Items[i]).BackColor == Color.White)
{
    counterWhite += 1;
}

或者您可以切换到一个foreach循环,并一次性转换它们(使用LINQ):

代码语言:javascript
复制
foreach (var pBox in new lstBox.Items.Cast<PictureBox>())
{
    if (pBox.BackColor == Color.White)
    {
        counterWhite += 1;
    }
    ...
}

但是,不要将ListBox控件用作引用PictureBox控件的临时存储。您可以创建一个List<PictureBox>来存储引用,然后在迭代集合时不必强制转换。

或者更好的方法(还有我会选择的那个),只需查询表单上的控件,并计数"PictureBox“类型的控件的数量,这些控件具有您要寻找的BackColor (再次使用LINQ )。

代码语言:javascript
复制
var counterWhite = Controls.OfType<PictureBox>()
                           .Count(p => p.BackColor == Color.White);

var counterGreen = Controls.OfType<PictureBox>()
                           .Count(p => p.BackColor == Color.Green);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25014717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档