簡體   English   中英

C#程序崩潰comboBox SelectedItem ToString

[英]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_ClickcomboFilter.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM