0
 void y_Click(object sender, RoutedEventArgs e)
    {

        CheckBox che = lbox.SelectedItem as CheckBox;

        if ((bool)che.IsChecked)
        {
            MessageBox.Show(che.Content.ToString());
        }
    }

这里按钮名称是 y,lbox 是我动态添加复选框的列表框。按钮 y 也通过动态添加到列表框。

对于上面代码中的按钮单击事件,它表示NullReferenceException并且 lbox.SelectedItem 为 Null,如断点所示。如果我在 lboxSelectionChanged 事件中实现相同的代码,它工作正常并且 lbox.SelectedItem 不为空。

我的实施有什么问题?

4

2 回答 2

3

如果as运算符无法转换为您想要的类型,则返回null. 这里发生的最有可能是您lbox.SelectedItem的不是 a CheckBox,或者它是nullche在尝试获取其IsChecked属性之前,您应该检查它是否为空。

void y_Click(object sender, RoutedEventArgs e)
{

    CheckBox che = lbox.SelectedItem as CheckBox;

    if (che == null) return;    // <--- Add this

    if ((bool)che.IsChecked)
    {
        MessageBox.Show(che.Content.ToString());
    }
}
于 2013-01-05T04:37:08.897 回答
0

实际上,IsChecked 与 listbox 的 selectionchanged 事件不同。选中复选框并不意味着已经进行了列表框选择。我发现,每当我单击复选框内容时,选择都会更改,但在选中复选框时不会更改。所以,事情就是这样。

于 2013-04-30T05:23:05.730 回答