首页 > 解决方案 > 如何修复错误'InvalidArgument ='7'的值对'index'无效

问题描述

如果循环找到将触发事件的字符串,我将列表视图设置为背景颜色格式。

我已经将该函数困在 if else 语句中,但错误仍然存​​在。

foreach (ListViewItem li in listView1.Items)
        {
            for (int i = 0; i < listView1.Columns.Count; i++)
            {

                if (li.SubItems[i].Text.ToString() == "Pending")
                {
                    li.BackColor = Color.Turquoise;
                    li.ForeColor = Color.White;
                }
                else if (li.SubItems[i].Text.ToString() == "Paid")
                {
                    li.BackColor = Color.Green;
                    li.ForeColor = Color.White;
                }
                else if (li.SubItems[i].Text.ToString() == "Over Due")
                {
                    li.BackColor = Color.Red;
                    li.ForeColor = Color.White;
                }

            }

        }

这是我遇到的错误。'InvalidArgument='7' 的值对'index' 无效

标签: c#

解决方案


问题出在您的内部 for 循环中,您正在迭代listView1.Columns而不是itemRow.SubItems

你应该更新你的 for 循环,比如

foreach (ListViewItem li in listView1.Items)
    {
        for (int i = 0; i < listView1.SubItems.Count; i++)
        {                           //^^^^^^^^ this is what you need to change
            //Your code goes here
        }
    }

或者你可以使用 foreach 循环,

foreach (ListViewItem li in listView1.Items)
    {
        foreach (var subItem in li.SubItems)
        {                           
            if (subItem.Text.ToString() == "Pending") {
                  li.BackColor = Color.Turquoise;
              }
            else if (subItem.Text.ToString() == "Paid") {
                  li.BackColor = Color.Green;
              }
            else if (subItem.Text.ToString() == "Over Due") {
                  li.BackColor = Color.Red;
              }
        }
    li.ForeColor = Color.White;
    }

您的代码给出错误可能是因为 listView1.Columns.Count更大listView1.SubItems.Count

奖励: 在所有条件下li.ForeColor = Color.White;都相同,您可以在 if..else 阶梯之外编写它,而不是在每个条件中编写它。请检查我更新的代码 if..else


推荐阅读