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 は null ではありません..

私の実装で何が間違っていますか?

4

2 に答える 2

3

asオペレーターが目的の型へのキャストに失敗した場合は、 を返しますnull。ここで起こっている可能性が最も高いのは、あなたlbox.SelectedItemが ではないCheckBox、または であるということですnullcheプロパティを取得する前に、それが nullであることを確認する必要があり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 は、リストボックスの selectionchanged イベントとは異なります。チェックボックスをチェックしても、リストボックスが選択されたわけではありません。そして、私が見つけたのは、チェックボックスの内容をクリックするたびに選択が変更されますが、チェックボックスがチェックされたときではありません。それで、それが問題です。

于 2013-04-30T05:23:05.730 に答える