2010-11-19 5 views
0

J'ai un TreeView avec un nœud parent et deux enfants. Chacun des nœuds contient une case à cocher stockée dans un TreeViewItem. Je souhaite que les cases à cocher des deux enfants soient définies sur IsChecked = true lorsque l'utilisateur vérifie le nœud parent et que les cases à cocher des deux enfants soient IsChecked = false lorsque l'utilisateur désactive le nœud parent.Exception VB.NET WPF NullReference

J'ai une boucle for dans laquelle les cases à cocher du nœud enfant sont stockées dans une liste. L'événement check/uncheck du nœud parent checkbox doit parcourir la liste des cases du nœud enfant, mais je rencontre un problème au niveau de la liste. Pour une raison quelconque, la liste est égale à "rien" dans l'événement check/uncheck du nœud parent. Quelqu'un peut-il expliquer comment je devrais accéder à cette liste?

Voici mon code:

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 

Merci pour l'aide!

Répondre

3

Pourriez-vous essayer de changer la ligne:

Dim childCheckboxes() As CheckBox 

Pour:

Dim childCheckboxes as new list(of CheckBox) 
+0

Merci qui ont résolu l'exception NullReference mais la liste des childCheckboxes est encore vide lorsque je tente de l'utiliser dans la méthode chkbox_AllChecked ... Une idée de pourquoi il est vide là? – zzMzz

+0

Au lieu d'affecter les éléments de liste par index, utilisez la méthode .Add(). –

Questions connexes