2013-04-27 36 views
2

用戶可以在一個列表框,如下所示單擊一個項目:C#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) 
     ...... 
} 

一切都很好。但是,如果用戶點擊一個空的空間,在列表框,它顯示了以下錯誤:因爲這行代碼的

System.NullReferenceException 

這就是:

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

有沒有人有一個聰明的解決辦法?或者建議一個替代我的代碼?

+0

你調試了你的代碼嗎? – 2013-04-27 17:29:20

回答

7

解決方法是檢查空值,並退出早。

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

這可以避免由其他答案引入的嵌套,這會使代碼變得不可讀。

+0

是的我檢查這個建議和它的乾淨和簡單的謝謝 – 2013-04-27 17:43:29

1

如何做一個

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

應防止錯誤的發生。

+0

是這樣做的有效方式謝謝。 – 2013-04-27 17:43:05

4

您可以在該行之前檢查SelectedIndex

if(listBox2.SelectedIndex < 0) 
    return; 
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) 
     ...... } 
    } 
} 
+0

感謝你的幫助 - 精美的作品 – 2013-04-27 17:43:46

1

只檢查第一,如果listbox1.SelectedItem爲空之前調用此行:

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

然而這些都不讓你回去,然後從列表框中重新選擇。仍在研究這個問題 - 將會更新。

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

而(用戶== NULL){ 嘗試 { 用戶 = this.lstAdministratorName.SelectedItem.ToString(); } catch { lstAdministratorName.ClearSelected(); return; } } – 2015-11-13 17:33:26

+0

對不起,新的論壇,並沒有弄清楚如何添加代碼。它確實工作。 – 2015-11-13 17:35:25

+0

我用你的評論編輯了你的文章。考慮閱讀[Markdown幫助](http://stackoverflow.com/editing-help)在Stack Overflow上正確地格式化帖子。 – Tunaki 2015-11-13 18:54:58