El usuario puede hacer clic en un elemento en un cuadro como el siguiente:

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

Todo está muy bien. Sin embargo, si el usuario hace clic en un espacio vacío en el cuadro de lista, se muestra el siguiente error:

System.NullReferenceException

Esto es debido a esta línea de código:

string[] p = 
    Directory.GetFiles(
        textBoxDir.Text, 
        listBox1.SelectedItem.ToString(),   
        SearchOption.AllDirectories);

¿Alguien tiene una inteligente trabajo de todo? O sugerir una aalternative a mi código?

¿Depurar el código?

OriginalEl autor Nigel.Harris | 2013-04-27

6 Comentarios

  1. 8

    La solución es comprobar un valor nulo, y salir temprano.

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

    Esto evita la anidación introducidas por las otras respuestas, lo que hace que el código sea más legible.

    OriginalEl autor devdigital

  2. 1

    Cómo hacer un

    if(listBox1.SelectedItem != null){
        //... do your work with listBox1.SelectedItem here
    }

    que debe impedir que el error ocurra.

    OriginalEl autor mauris

  3. 1

    ¿

    if (listBox1.SelectedItem != null)
    {
        string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(),   SearchOption.AllDirectories);
    }

    Código Completo

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

    OriginalEl autor Nikhil Agrawal

  4. 1

    acaba de comprobar en primer lugar si listbox1.SelectedItem está vacío o no antes de llamar a esta línea:

    string[] p = Directory.GetFiles(textBoxDir.Text, listBox1.SelectedItem.ToString(),   SearchOption.AllDirectories);

    OriginalEl autor lem.mallari

  5. -1

    Sin embargo, ninguno de estos le permiten ir y volver a seleccionar desde el cuadro de lista. Todavía trabajando en esa cuestión – se actualizará.

    while (user == null) {
        try {
            user = this.lstAdministratorName.SelectedItem.ToString();
        } catch { 
            lstAdministratorName.ClearSelected(); 
            return; 
        }
    }
    mientras (usuario == null) { try { usuario = este.lstAdministratorName.SelectedItem.ToString(); } catch { lstAdministratorName.ClearSelected(); return; } }
    Lo siento de nuevo en el foro y no he de averiguar cómo agregar el código. Funciona aunque.
    He editado tu post con tu comentario. Recomendamos la lectura de la Rebajas de ayuda para formatear correctamente post sobre el Desbordamiento de la Pila.

    OriginalEl autor fred conklin

Dejar respuesta

Please enter your comment!
Please enter your name here