用户可以单击ListBox中的项目,如下所示:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
textBox2.Clear();
listBox2.Items.Clear();
string[] p =
Directory.GetFiles(
textBoxDir.Text,
listBox1.SelectedItem.ToString(),
SearchOption.AllDirectories);
foreach (string open in p)
......
}
一切都很好。但是,如果用户单击ListBox中的空白区域,则会显示以下错误:
System.NullReferenceException
这是因为这行代码:
string[] p =
Directory.GetFiles(
textBoxDir.Text,
listBox1.SelectedItem.ToString(),
SearchOption.AllDirectories);
有没有人有聪明的工作?或建议替代我的代码?
答案 0 :(得分:8)
解决方法是检查空值,然后提前退出。
if (listBox1.SelectedItem == null)
{
return;
}
这避免了其他答案引入的嵌套,这使得代码的可读性降低。
答案 1 :(得分:4)
您可以在该行前检查SelectedIndex
:
if(listBox2.SelectedIndex < 0)
return;
答案 2 :(得分:1)
如何做一个
if(listBox1.SelectedItem != null){
// ... do your work with listBox1.SelectedItem here
}
应该可以防止错误发生。
答案 3 :(得分:1)
怎么样
if (listBox1.SelectedItem != null)
{
string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(), SearchOption.AllDirectories);
}
完整代码
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
{
textBox2.Clear();
listBox2.Items.Clear();
string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(), SearchOption.AllDirectories);
foreach (string open in p)
...... }
}
}
答案 4 :(得分:1)
在调用此行之前,先检查listbox1.SelectedItem是否为空:
string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(), SearchOption.AllDirectories);
答案 5 :(得分:-1)
但是,这些都不允许您重新进入并从列表框中重新选择。仍在处理该问题 - 将更新。
while (user == null) {
try {
user = this.lstAdministratorName.SelectedItem.ToString();
} catch {
lstAdministratorName.ClearSelected();
return;
}
}