我有一个愚蠢的错误,我无法拍摄。
我正在使用字符串来检查文件夹名称及其扩展名类型。我这样做,所以我可以在文件夹之间导航。这与我的第一个文件夹选择工作正常,但是,当我尝试单击第二个文件夹时,我得到空引用异常。
这就是我现在所拥有的。
string clickObject = listBox1.SelectedItem.ToString();
int index = clickObject .LastIndexOf('.');
string extension = clickObject .Substring(index + 1, clickObject .Length - index - 1);
if (extension == "folder")
{
// do stuff
}
在此之后我只需检查我文件夹中的文件。
当我回到我的可搜索文件夹的根目录并单击另一个目录时,就是当我收到错误并突出显示行string clickObject = listBox1.SelectedItem.ToString();
时。
在我设置此方法的最后,我尝试设置clickedObject = null;
我尝试删除clickObject.Remove(0);
中包含的字符串,但错误仍然存在。
如何清除clickedObject中保存的信息,以便用新信息覆盖它?
修改
抱歉忘记提及当我回到根目录时,我有一个调用此方法的按钮:
using (var client = new WebClient())
{
result = client.DownloadString("http://foo.foo.com/images/getDirectoryList.php");
}
string[] names = result.Split('|');
listBox1.Items.Clear();
foreach (string name in names)
{
listBox1.Items.Add(name);
}
listBox1.Update();
listBox1.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged);
但是,当我单击列表框中的某个项目时,它是第一组使用的代码,它是一个单独的方法。
答案 0 :(得分:1)
不确定这是不是一个错误..但我之前也遇到过这个问题。
问题是,在SelectedItem
事件期间SelectedIndexChanged
并非始终可用..或有时根本不可用。
修复方法是直接访问该项目:
string clickObject = listBox1.Items[listBox1.SelectedIndex].ToString();
此外,当你在那里时......你可以在File.GetExtension
中使用System.IO
方法获取扩展程序(而不是自己动手):
using System.IO;
string extension = File.GetExtension(clickObject);
答案 1 :(得分:1)
如果您正在处理SelectedIndexChanged
事件,则需要处理它为空,因为有些情况下不会设置它。
因此,在您的处理程序中,在尝试将其转换为字符串之前,必须检查listBox1.SelectedItem
是否为空:
if (listBox1.SelectedItem != null)
{
// Your code
}