C# 从自动保存的列表框中的文件获取文件路径
我有一个保存的列表框。当有人退出程序时,它会将所有姓名保存在列表框中,当他们输入时,会将所有姓名添加回列表框 问题是,当表单打开并且listBox2为空时,它就可以正常工作并执行其功能。但是,当程序在Form_Load上自动将文本框中的项目加载到listBox2中时,当我单击listBox2时,会出现以下错误 “System.ArgumentOutOfRangeException”类型的未处理异常 发生在mscorlib.dll中 附加信息:索引超出范围。必须是非负的 并且小于集合的大小 字符串fullFileName=selectedFiles[listBox2.SelectedIndex]C# 从自动保存的列表框中的文件获取文件路径,c#,winforms,listbox,C#,Winforms,Listbox,我有一个保存的列表框。当有人退出程序时,它会将所有姓名保存在列表框中,当他们输入时,会将所有姓名添加回列表框 问题是,当表单打开并且listBox2为空时,它就可以正常工作并执行其功能。但是,当程序在Form_Load上自动将文本框中的项目加载到listBox2中时,当我单击listBox2时,会出现以下错误 “System.ArgumentOutOfRangeException”类型的未处理异常 发生在mscorlib.dll中 附加信息:索引超出范围。必须是非负的 并且小于集合的大小 字符串
你的代码有一个很大的缺陷,你有一个带有文件名的列表框和一个带有路径的列表,但是你只保存列表框上的数据,所以当你恢复列表框的内容时,你的列表仍然是空的,这就是为什么它在SelectedIndexChanged上给你一个异常 您还需要以某种方式存储路径,然后在加载时恢复路径。最简单的解决方案可以是交错文件上的数据,保存列表框中的文件名、列表中的路径等,直到保存了所有内容,然后在读回时恢复列表框中的一行名称和列表中的一行路径 编辑:最好不要保存列表框中的内容,而是保存列表中的内容,然后您可以执行以下操作:
line = sr.ReadLine();
//Continue to read until you reach end of file
while (line != null)
{
this.listBox2.Items.Add(Path.GetFileName(line));
selectedFiles.Add(line);
//Read the next line
line = sr.ReadLine();
}
//close the file
sr.Close();
将Form_Load中的代码添加到问题中。我添加了Form_Load代码,非常感谢您的修复。我现在明白它为什么这么做了!事情是这样的。当重新加载时,这可能会停止错误,但当我重新加载时,文本框4中不再显示路径。检查文件是否已正确保存并读取检查选定的文件和listBox2内容在表单关闭时,它仅将名称保存在listBox2中并写入文件。因此,文本文件没有路径,只有文件名。有什么建议的修复方法吗?你看过编辑吗?保存列表中的内容,而不是列表框,然后使用我添加的代码。
line = sr.ReadLine();
//Continue to read until you reach end of file
while (line != null)
{
this.listBox2.Items.Add(Path.GetFileName(line));
selectedFiles.Add(line);
//Read the next line
line = sr.ReadLine();
}
//close the file
sr.Close();