InvalidArgument=当尝试仅获取 ListView 中的选定项目时,“0”的值对 'index' 无效
InvalidArgument=Value of '0' is not valid for 'index' when trying to get only selected item in a ListView
所以我试图从列表视图中删除一个项目并从文本中删除一行。我使用了 SelectedItems[0],它给了我一个错误。是的,我确实将多选设置为 false。
错误日志:
InvalidArgument=Value of '0' is not valid for 'index'.
我的代码:
DialogResult msgBox = MessageBox.Show("Are you sure you want to remove this port?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (msgBox == DialogResult.No)
{
// Do nothing
}
if (msgBox == DialogResult.Yes)
{
listView1.SelectedItems[0].Remove();
StreamReader sr = File.OpenText("ports.cfg");
string srStr = sr.ReadToEnd().ToString();
sr.Close();
List<String> linesList = File.ReadAllLines("ports.cfg").ToList();
linesList.RemoveAt(listView1.SelectedItems[0].Index);
File.WriteAllLines("ports.cfg", linesList);
linesList.ToArray();
}
没有适当的 minimal, reproducible example 就无法分辨。但是在上面的代码中,您似乎首先从 ListView
本身中删除了所需的项目,然后您尝试从同一项目中检索 Index
属性,大概是您刚刚已删除。
SelectedItems
将因删除项目而变成空的(因为你说你 "...将多选设置为 false"),所以当你尝试检索索引 0
处的元素,当然那里没有。
即使有,您也不会最终得到您真正想要的物品,因为您已经从 SelectedItems
collection 中移除了您想要从 [=16 中移除的物品=] 稍后。仍然留在 SelectedItems
collection 中的任何项目将是完全不同的项目,而不是您想要从 ports.cfg
文件中删除的项目。
我认为像这样的东西会更好:
ListViewItem portItem = listView1.SelectedItems[0];
int portIndex = portItem.Index;
portItem.Remove();
StreamReader sr = File.OpenText("ports.cfg");
string srStr = sr.ReadToEnd().ToString();
sr.Close();
List<String> linesList = File.ReadAllLines("ports.cfg").ToList();
linesList.RemoveAt(portIndex);
File.WriteAllLines("ports.cfg", linesList);
linesList.ToArray();
当然,上面的假设是在到达此代码时,您已经确认确实选择了一个项目。如果不是这种情况,那么您还需要为此添加检查,方法是检查 SelectedItems.Count
属性 以确保它大于 0。
所以我试图从列表视图中删除一个项目并从文本中删除一行。我使用了 SelectedItems[0],它给了我一个错误。是的,我确实将多选设置为 false。
错误日志:
InvalidArgument=Value of '0' is not valid for 'index'.
我的代码:
DialogResult msgBox = MessageBox.Show("Are you sure you want to remove this port?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (msgBox == DialogResult.No)
{
// Do nothing
}
if (msgBox == DialogResult.Yes)
{
listView1.SelectedItems[0].Remove();
StreamReader sr = File.OpenText("ports.cfg");
string srStr = sr.ReadToEnd().ToString();
sr.Close();
List<String> linesList = File.ReadAllLines("ports.cfg").ToList();
linesList.RemoveAt(listView1.SelectedItems[0].Index);
File.WriteAllLines("ports.cfg", linesList);
linesList.ToArray();
}
没有适当的 minimal, reproducible example 就无法分辨。但是在上面的代码中,您似乎首先从 ListView
本身中删除了所需的项目,然后您尝试从同一项目中检索 Index
属性,大概是您刚刚已删除。
SelectedItems
将因删除项目而变成空的(因为你说你 "...将多选设置为 false"),所以当你尝试检索索引 0
处的元素,当然那里没有。
即使有,您也不会最终得到您真正想要的物品,因为您已经从 SelectedItems
collection 中移除了您想要从 [=16 中移除的物品=] 稍后。仍然留在 SelectedItems
collection 中的任何项目将是完全不同的项目,而不是您想要从 ports.cfg
文件中删除的项目。
我认为像这样的东西会更好:
ListViewItem portItem = listView1.SelectedItems[0];
int portIndex = portItem.Index;
portItem.Remove();
StreamReader sr = File.OpenText("ports.cfg");
string srStr = sr.ReadToEnd().ToString();
sr.Close();
List<String> linesList = File.ReadAllLines("ports.cfg").ToList();
linesList.RemoveAt(portIndex);
File.WriteAllLines("ports.cfg", linesList);
linesList.ToArray();
当然,上面的假设是在到达此代码时,您已经确认确实选择了一个项目。如果不是这种情况,那么您还需要为此添加检查,方法是检查 SelectedItems.Count
属性 以确保它大于 0。