winforms C# InvalidArgument ='2'的值对'index'无效

piwo6bdm  于 2022-12-04  发布在  C#
关注(0)|答案(2)|浏览(325)

我是C#的新手,但我遇到一个错误,指出:InvalidArgument='2'的值对'index'无效。
我想将checkedlistbox中的项目设置为选中,如果listbox中有匹配项。有人能帮助我解决这个问题吗?
这是我的代码中出现问题的部分。

for (int i = 0; i < checklistbox.Items.Count; i++)
{
    if (checklistbox.Items[i].ToString() == listbox.Items[i].ToString())
     {
        //Check only if they match! 
        checklistbox.SetItemChecked(i, true);
     }
}
plicqrtu

plicqrtu1#

你只需要使用嵌套的for循环。

for (int i = 0; i < listbox.Items.Count; i++)
 {
   for (int j = 0; j < checkedlistbox.Items.Count; j++)
   {
     if (listbox.Items[i].ToString() == checkedlistbox.Items[j].ToString())
     {
       //Check only if they match! 
       checkedlistbox.SetItemChecked(i, true);
     }
   }
 }
zwghvu4y

zwghvu4y2#

出现此错误的原因是因为您正在循环检查列表框的项目计数。例如,如果该数组中有3个项目,而列表框只有2个项目,则在第三次循环中(当i = 2时),您试图引用列表框数组中不存在的项目。
另一种做法是这样的:

foreach (var item in listbox.Items)
        {
            if (Array.Exists(checklistbox.Items, lbitem => lbitem.ToString() == item.ToString()))
            {
               //They match! 
               checklistbox[item].MarkAsChecked()
            }
        }

更新:更新答案以添加MarkAsChecked()并循环检查表数组中保存的用户输入值。

相关问题