附加信息: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;
我意识到这可能看起来像一个重复的问题(我已经看到很多其他问题询问这个错误),但是我找不到解释我遇到的问题的答案。该错误是由对
的调用引起的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;