C#Program Crash comboBox SelectedItem ToString

时间:2017-03-16 09:30:51

标签: c# winforms combobox

我不知道,为什么程序崩溃。

如果我点击"重新加载"按钮:

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;,但也没有工作。

3 个答案:

答案 0 :(得分:4)

comboFilter_SelectionChanged在重新加载后以某种方式触发,您从combo中移除项目,这是明确方法的结果。在使用之前,请确保SelectedItem中的comboFilter_SelectionChanged不为空。

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显示未处理   向用户发出异常消息并停止执行程序。

答案 1 :(得分:1)

抛出异常是因为调用comboFilter_SelectionChangedreloadBtn_Click会隐式调用comboFilter.Items.Clear()。在这种情况下,comboFilter.SelectedItem会从之前选择的项目更改为null

null中检查comboFilter_SelectionChanged

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

答案 2 :(得分:0)

您可能想要为comboFilter.SelectedItem添加空值检查,例如比如comboFilter.SelectedItem?.ToString()