C# ListBox Selected Item Null Exception

本文关键字:Null Exception Item Selected ListBox | 更新日期: 2023-09-27 18:11:04

用户可以按如下方式单击列表框中的项目:

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);

有人有聪明的工作吗?或者建议我的代码的替代方案?

C# ListBox Selected Item Null Exception

解决方法是检查空值,并尽早退出。

if (listBox1.SelectedItem == null)
{
    return;
}

这避免了其他答案引入的嵌套,这使得代码的可读性降低。

您可以在该行前检查SelectedIndex:

if(listBox2.SelectedIndex < 0)
    return;

if(listBox1.SelectedItem != null){
    // ... do your work with listBox1.SelectedItem here
}
可以防止错误发生的

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) 
         ...... }
    }
}

先检查一下是否listbox1。

在调用该行之前,SelectedItem为空或不为空
string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(),   SearchOption.AllDirectories);

我也遇到过类似的问题。这是我修理它的最短方法。

    private void button1_Click(object sender, EventArgs e)
    {
        radioButton1.Checked = !radioButton1.Checked;
        string indicadorPais = "Something";
        if (listaPaises.SelectedItem != null)
        {
            indicadorPais = listaPaises.SelectedItem.ToString();
            label1.Text = indicadorPais;
        }

作为旁注。我的条件最初是比较listaPaises.SelectedItem.ToString() != null。这是因为我正在将null转换为字符串。我发送的代码工作正常

但是这些都不允许您返回并从列表框中重新选择。仍在解决这个问题-会更新的。

while (user == null) {
    try {
        user = this.lstAdministratorName.SelectedItem.ToString();
    } catch { 
        lstAdministratorName.ClearSelected(); 
        return; 
    }
}