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.