Создаю себе менеджер паролей, и у меня возникают некоторые проблемы с сегментом кода.Предполагается, что приложение открывает XML-файл, а затем заполняет список с элементами, содержащимися в этом XML-документе (учетные записи).Щелчок правой кнопкой мыши по списку дает контекстное меню для различных опций, каждый из которых отлично работает по отдельности.Тем не менее, после открытия документа XML, а затем удалить одну из учетных записей из списка, а затем попытаться добавить другую учетную запись, он выдает следующее:
ArgumentOutOfRangeException unhandled.
InvalidArgument=Value of '4' is not valid for 'index'.
Parameter name: index
Я предполагаю, что происходит неправильно, когда яудалить учетную запись из списка, я испортил счетчик переменной индекса, которая увеличивается для каждого элемента в XML-документе при запуске приложения.Не уверен, что лучший способ исправить это, не нарушая другие части кода.Я думал о том, чтобы сбросить значение «index» после удаления учетной записи, подсчитав, сколько всего элементов теперь в listView, но не уверен, что это лучше.Вот как выглядит код при открытии xml.
private void openPasswordFileToolStripMenuItem_Click(object sender, EventArgs e)
{
System.Xml.XmlDocument loadDoc = new System.Xml.XmlDocument();
try
{
loadDoc.Load(Application.StartupPath + "\\database.xml");
}
catch (System.IO.FileNotFoundException)
{
MessageBox.Show("Password Database does not exist!");
}
foreach (System.Xml.XmlNode node in loadDoc.SelectNodes("/Database/Account"))
{
lvItem = listView1.Items.Insert(index, node.Attributes["Description"].InnerText); ;
lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, node.Attributes["Username"].InnerText)); ;
lvItem.SubItems.Add(new ListViewItem.ListViewSubItem(lvItem, node.Attributes["Password"].InnerText)); ;
index += 1;
}
}
И, наконец, сегмент для удаления учетной записи:
private void removeSelectedAccountToolStripMenuItem_Click(object sender, EventArgs e)
{
listView1.Items.Remove(listView1.SelectedItems[0]);
}
Опять все работает нормально, пока не будет выполнена следующая последовательность:Файл учетных записей открыт -> Удалена учетная запись -> Добавлена другая учетная запись.В этот момент генерируется исключение, и новая учетная запись никогда не добавляется в представление списка.
Вот подробности исключения.Это «дамп стека»?
System.ArgumentOutOfRangeException was unhandled
Message=InvalidArgument=Value of '3' is not valid for 'index'.
Parameter name: index
Source=System.Windows.Forms
ParamName=index
StackTrace:
at System.Windows.Forms.ListView.ListViewItemCollection.Insert(Int32 index, ListViewItem item)
at System.Windows.Forms.ListView.ListViewItemCollection.Insert(Int32 index, String text)
at PassKeeper.Form1.addAccountToolStripMenuItem_Click(Object sender, EventArgs e) in C:\Users\Hamann\documents\visual studio 2010\Projects\PassMan\PassMan\Form1.cs:line 35