Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从自动保存的列表框中的文件获取文件路径_C#_Winforms_Listbox - Fatal编程技术网

C# 从自动保存的列表框中的文件获取文件路径

C# 从自动保存的列表框中的文件获取文件路径,c#,winforms,listbox,C#,Winforms,Listbox,我有一个保存的列表框。当有人退出程序时,它会将所有姓名保存在列表框中,当他们输入时,会将所有姓名添加回列表框 问题是,当表单打开并且listBox2为空时,它就可以正常工作并执行其功能。但是,当程序在Form_Load上自动将文本框中的项目加载到listBox2中时,当我单击listBox2时,会出现以下错误 “System.ArgumentOutOfRangeException”类型的未处理异常 发生在mscorlib.dll中 附加信息:索引超出范围。必须是非负的 并且小于集合的大小 字符串

我有一个保存的列表框。当有人退出程序时,它会将所有姓名保存在列表框中,当他们输入时,会将所有姓名添加回列表框

问题是,当表单打开并且listBox2为空时,它就可以正常工作并执行其功能。但是,当程序在Form_Load上自动将文本框中的项目加载到listBox2中时,当我单击listBox2时,会出现以下错误

“System.ArgumentOutOfRangeException”类型的未处理异常 发生在mscorlib.dll中

附加信息:索引超出范围。必须是非负的 并且小于集合的大小

字符串fullFileName=selectedFiles[listBox2.SelectedIndex]


你的代码有一个很大的缺陷,你有一个带有文件名的列表框和一个带有路径的列表,但是你只保存列表框上的数据,所以当你恢复列表框的内容时,你的列表仍然是空的,这就是为什么它在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();