附加信息:InvalidArgument=“0”的值对 'index' 无效

Additional information: InvalidArgument=Value of '0' is not valid for 'index'

我意识到这可能看起来像一个重复的问题(我已经看到很多其他问题询问这个错误),但是我找不到解释我遇到的问题的答案。该错误是由对

的调用引起的
invList.SelectedItems[0].Text //invList is a ListView

据我所知,这条指令引发的错误表明试图访问 ListView 中所选项目的空列表(或数组?)。但是,我尝试访问的 ListView 在指令执行时填充了项目。以下是我发出这条指令的方法:

方法一:删除项目

public bool deleteItem()
    {
        if (invList.SelectedItems.Count == 0) //if no item selected...
        {
            MessageBox.Show("Error: No item selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return false;
        }
        else
        {
            DialogResult dialogResult = MessageBox.Show(
                "Are you sure you want to delete item: " + invList.SelectedItems[0].Text + "?",
                "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (dialogResult == DialogResult.Yes)
            {
                for (int i = 0; i < itemRecords.Count; i++)
                {
                    if ((itemRecords[i].id.ToString() == invList.SelectedItems[0].Text) && (itemRecords[i].practice == clinicName))
                    {
                        itemRecords.Remove(itemRecords[i]);
                        listRefresh();
                    }
                }
                return true; //return true to indicate that data has been edited
            }
            return false; // return false to indicate that nothing has changed
        }
    }

方法#2:updateItem

 public bool updateItem()
    {
        if (invList.SelectedItems.Count == 0) //if no item selected
        {
            MessageBox.Show("Error: No item selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            return false;
        }
        else
        {
            for (int i = 0; i < itemRecords.Count; i++)
            {
                //if id == the id of the selected item
                if((itemRecords[i].id.ToString() == invList.SelectedItems[0].Text) && (itemRecords[i].practice == this.Text))
                {
                    ItemAddition itemAddition = new ItemAddition(itemRecords, itemRecords[i], this);
                    itemAddition.ShowDialog();
                }
            }
            return true;
        }
    }

列表刷新:

       public void listRefresh()
    {
        invList.Items.Clear();
        loadItems();
    }

加载项:

        private void loadItems()
    {
        foreach (Record r in itemRecords)
        {
            if (r.practice == clinicName)
                invList.Items.Add(r.ToString());
        }
    }

调用第一个方法时调用错误,而不是调用第二个方法时调用错误。这种不一致是我困惑的原因。这个错误只发生在第一种方法中有什么原因吗?

删除项目后移动刷新方法。如果您移动项目并重新绑定,那么您将失去选择。

   for (int i = 0; i < itemRecords.Count; i++)
    {
        if ((itemRecords[i].id.ToString() == invList.SelectedItems[0].Text) && (itemRecords[i].practice == clinicName))
        {
            itemRecords.Remove(itemRecords[i]);
            //listRefresh();
        }
    }

listRefresh();                
return true;