ArgumentOutOfRangeException是未处理的C#错误

ArgumentOutOfRangeException是未处理的C#错误,c#,exception,invalid-argument,C#,Exception,Invalid Argument,InvalidArgument=值“4”对“索引”无效。 参数名称:索引 这是我的密码 if (lvnames.Items.Count > 0) { for (int x = 0; x < lvScratch.Items.Count; x++) { **lvnames.Items[x].SubItems[4].Text = lvnamestemp.Items[x].SubItems[0].Text;**

InvalidArgument=值“4”对“索引”无效。 参数名称:索引

这是我的密码

   if (lvnames.Items.Count > 0)
   {
         for (int x = 0; x < lvScratch.Items.Count; x++)
         {
           **lvnames.Items[x].SubItems[4].Text = lvnamestemp.Items[x].SubItems[0].Text;**
         }
   }
   else
   {

            MessageBox.Show("No Record", "Empty", MessageBoxButtons.OK, MessageBoxIcon.Information);

   }
if(lvnames.Items.Count>0)
{
对于(int x=0;x
我的名字。物品有4列 我的lvnamestemp有3列

当我运行代码“我的lvnames.Items有4列”时,我在粗体代码上得到了InvalidArgument=值为“4”的错误

但您正在使用以下代码访问第5列:

lvnames.Items[x].SubItems[4]

0 1 2 3 4(4是第五项)。

在.NET中,几乎所有数组和集合都是基于零的。ListView中的实际列数与ListViewItem中的子项数无关;重要的是您添加的子项的数量。但通常它们是一样的。如果有四列,那么可能会添加四个子项,因此它们将位于索引0、1、2和3处。显然4不是一个有效的索引。

您的代码一开始是这样的吗?我编辑了它并更改了括号位置,对不起。我尝试使用0而不是4的索引,如果没有错误,这意味着4超出了范围。添加一个空白列并使用4(可能吗?)这通常是我解决编程问题的愚蠢方法Xbi已经在我的lvnames上添加了5列,但仍然是相同的错误。。。我知道这对于简单的编程问题来说听起来很疯狂,但我想不通,我需要一些想法。谢谢你的帮助尼斯,我不知道@OP index是count from 0如果有1列,则索引为0。如果有两列,索引将从0变为1。如果有三列,则索引为0、1、2。谁在乎你的C++?你的C-)怎么样正如我所说,在
列表视图中有多少列其实并不重要。
ListViewItem
子项
集合独立于此。重要的是您添加的子项的数量。请注意,该项本身是它自己的第一个子项。如果索引4无效,则意味着您向该项添加了三个子项或更少子项。如果您想访问索引4处的子项,则必须添加一个子项,即必须向该项添加至少四个子项。我可以说多少次相同的话?添加到ListView中的列数与此无关!重要的是添加到该项的子项的数量。如果需要,可以向ListView添加一百列,但如果只向项添加两个子项,则索引0、1和2处将只有子项。您没有向该项添加足够的子项。就这么简单。不要再考虑ListView中的列数,因为它与您的问题完全无关。