[英]C# ComboBox SelectedItem.toString() not returning expected results
[英]C# Program Crash comboBox 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錯誤。 我試圖使filtervalue = null;
在reloadBtn_Click中,但也不起作用。
重新加載后,您會以某種方式觸發comboFilter_SelectionChanged
,這是您從combo
刪除項目的原因,這是clear方法的結果。 使用它之前,請確保comboFilter_SelectionChanged
SelectedItem
不為null。
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#參考) -為什么程序會崩潰(停止執行)
引發異常時,公共語言運行庫(CLR)查找處理該異常的catch語句。 如果當前執行的方法不包含這樣的catch塊,則CLR將查看調用當前方法的方法,依此類推。 如果未找到catch塊,則CLR向用戶顯示未處理的異常消息,並停止執行程序。
唯一的例外得到投擲,因為comboFilter_SelectionChanged
從隱式調用reloadBtn_Click
時comboFilter.Items.Clear()
被調用。 在這種情況下, 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();
}
}
您可能想為comboFilter.SelectedItem添加一個空檢查,例如,像comboFilter.SelectedItem?.ToString()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.