2017-03-16 41 views
2

我不知道,爲什麼我的程序崩潰。C#程序崩潰組合框SelectedItem ToString

如果我點擊 「刷新」 按鈕:

private void reloadBtn_Click(object sender, RoutedEventArgs e) 
{ 
    comboFilter.Items.Clear(); 
    dataGridPrivatecustomers.Columns.Clear(); 
    dataGridPrivatecustomers.ItemsSource = null; 
    load_columns_privatecustomer(); 
    load_values_privatecustomer(); 
} 

所有作品。 但是,如果我選擇一個過濾器對我的搜索功能和點擊重新加載,然後崩潰:

private void comboFilter_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    labelfilter.Content = "Filter: " + comboFilter.SelectedItem; 
    filtervalue = comboFilter.SelectedItem.ToString(); 
} 

這是斷點:

filtervalue = comboFilter.SelectedItem.ToString(); 

我也得到一個NullReferenceException錯誤。 我嘗試在reloadBtn_Click中製作filtervalue = null;,但也無效。

+0

你有沒有試着用一個try catch子句,以獲得有關錯誤的詳細信息包圍你的代碼? –

+1

可能重複[什麼是NullReferenceException,以及如何解決它?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it ) – Sinatr

回答

4

comboFilter_SelectionChanged在重新加載後以某種方式啓動,您從combo中刪除項目,這是清除方法的結果。在使用之前,請確保在comboFilter_SelectionChanged中有SelectedItem不爲空。

private void comboFilter_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if(comboFilter.SelectedItem != null) 
    { 
     labelfilter.Content = "Filter: " + comboFilter.SelectedItem; 
     filtervalue = comboFilter.SelectedItem.ToString(); 
    } 
} 

作爲一個額外的注意事項,您的程序不能通過捕獲您的程序中拋出的異常而崩潰。使用try-catch正確處理異常。並且在它們發生之前儘量避免它們。就像我們在這裏通過檢查null一樣。這將防止程序崩潰。

try-catch (C# Reference) - 爲什麼程序會崩潰(停止執行)

當一個異常被拋出,公共語言運行庫(CLR)看起來 用於處理這個異常的catch語句。如果當前 執行方法不包含這樣的catch塊,則CLR查找 調用當前方法的方法,等等調用 堆棧。如果沒有找到catch塊,那麼CLR會向用戶顯示未處理的異常信息並停止執行程序。

+0

Thx爲答案。它現在有效。即時通訊新的C#很抱歉^^ –

+0

不客氣@OJean,沒問題。這是學習過程的一部分。 – Adil

0

您可能希望爲comboFilter.SelectedItem添加空值檢查,例如, like comboFilter.SelectedItem?.ToString()

1

由於comboFilter_SelectionChanged在調用comboFilter.Items.Clear()時從reloadBtn_Click隱式調用,所以拋出異常。在這種情況下,comboFilter.SelectedItem從先前選擇的項目更改爲null

comboFilter_SelectionChanged檢查null

private void comboFilter_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    if (comboFilter.SelectedItem != null) 
    { 
     labelfilter.Content = "Filter: " + comboFilter.SelectedItem; 
     filtervalue = comboFilter.SelectedItem.ToString(); 
    } 
}