c# listbox nullreferenceexception

C#ListBox Elemento seleccionado Excepción nula



nullreferenceexception (6)

El usuario puede hacer clic en un elemento en un ListBox de la siguiente manera:

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á bien. Sin embargo, si el usuario hace clic en un espacio vacío en el ListBox, 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 un trabajo inteligente? ¿O sugerir una alternativa a mi código?


¿Qué hay de hacer una

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

eso debería evitar que ocurra ese error.


Puede verificar SelectedIndex antes de esa línea:

if(listBox2.SelectedIndex < 0) return;


Qué tal si

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


simplemente verifique primero 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);


Sin embargo, ninguno de estos le permite regresar y volver a seleccionar en el cuadro de lista. Todavía estoy trabajando en ese tema - se actualizará.

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


La solución consiste en comprobar si hay un valor nulo y salir antes de tiempo.

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

Esto evita el anidamiento introducido por las otras respuestas, lo que hace que el código sea menos legible.