C#ListBox选择项目空例外

时间:2013-04-27 17:27:51

标签: c# listbox nullreferenceexception

用户可以单击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);

有没有人有聪明的工作?或建议替代我的代码?

6 个答案:

答案 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; 
    }
}