2010-11-19 12 views
0

私は、親ノードと2つの子ノードを持つTreeViewを持っています。各ノードには、TreeViewItemに格納されたチェックボックスが含まれています。ユーザーが親ノードをチェックしたときに2つの子ノードチェックボックスをIsChecked = trueに設定し、ユーザーが親ノードをオフにしたときに2つの子ノードチェックボックスをIsChecked = falseにします。VB.NET WPF NullReference例外

私は子ノードチェックボックスがリストに格納されているforループを持っています。親ノードチェックボックスチェック/チェック解除イベントは、子ノードのチェックボックスリストを反復する必要がありますが、リストに問題があります。なんらかの理由で、親ノードのチェック/チェック解除イベントのリストは「無」になります。どのように私はそのリストにアクセスする必要があります誰も説明できますか?助けのための

Public Class Question 

Dim childCheckbox As CheckBox 
Dim childCheckboxes() As CheckBox 

Public Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded 

    Dim parentCheckbox = New CheckBox 
    Dim parentNode = New TreeViewItem 

    parentCheckbox.Uid = "All Sites" 

    AddHandler parentCheckbox.Checked, AddressOf chkbox_AllChecked 
    AddHandler parentCheckbox.Unchecked, AddressOf chkbox_AllUnchecked 

    parentCheckbox.Content = "All Sites" 
    parentNode.Header = parentCheckbox 

    For Each osite In sites 

       Dim childNode = New TreeViewItem 
       Dim childCheckbox = New CheckBox 

       AddHandler childCheckbox.Checked, AddressOf chkbox_Checked 
       AddHandler childCheckbox.Unchecked, AddressOf chkbox_Unchecked 

       childCheckbox.Uid = osite.SiteName.ToString 

       childCheckbox.Content = osite.SiteName.ToString 
       childNode.Header = childCheckbox 
       parentNode.Items.Add(childNode) 

       'Add all childCheckbox to an array for use by parentChildbox methods to check/uncheck all 
       childCheckboxes(i) = childCheckbox 

       i += 1 

      Next 
      TreeView1.Items.Add(parentNode) 


    End Sub 

Private Sub chkbox_AllChecked(ByVal sender As Object, ByVal e As RoutedEventArgs) 
    Dim chk = DirectCast(sender, CheckBox) 

      'MessageBox.Show(chk.Uid.ToString) 


      'This part doesn't work. 
      For Each child In childCheckboxes 
       child.IsChecked = True 
      Next 

    End Sub 

Private Sub chkbox_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs) 
    Dim chk = DirectCast(sender, CheckBox) 

      'MessageBox.Show("Check!") 
      MessageBox.Show(chk.Uid.ToString) 

End Sub 

Private Sub chkbox_Unchecked(ByVal sender As Object, ByVal e As RoutedEventArgs) 
    Dim chk = DirectCast(sender, CheckBox) 

      'MessageBox.Show("Uncheck!") 
      MessageBox.Show(chk.Uid.ToString) 

End Sub 

End Class 

ありがとう:

はここに私のコードです!

答えて

3

あなたが行を変更しようとすることができます:

Dim childCheckboxes() As CheckBox 

へ:私はchkbox_AllChecked方法でそれを使用しようとするとNullReference例外なく、childCheckboxesリストを解決

Dim childCheckboxes as new list(of CheckBox) 
+0

おかげでまだ空であります...それがなぜそこに空いているのか? – zzMzz

+0

リスト要素をインデックスで代入するのではなく、.Add()メソッドを使用します。 –

関連する問題