2010-11-19 5 views
1

Onay kutularının listesi nasıl doldurulur? VB.NET WPF

Bir ebeveyn düğüm ve iki çocuk düğümle bir TreeView var (bir önceki soruya. VB.NET WPF NullReference Exception Bu bir takip). Düğümlerin her biri bir TreeViewItem içinde saklanan bir onay kutusu içerir. Kullanıcı, üst düğümü denetlediğinde iki çocuk düğüm onay kutusunun IsChecked = true olarak ayarlanmasını istiyorum ve kullanıcı, ana düğümün işaretini kaldırdığında iki çocuğun düğüm onay kutularının IsChecked = false olmasını istiyorum.

Çocuk düğüm onay kutularının bir listede saklandığı bir döngü var. Ana düğümün onay kutusunu işaretleyin/işaretini kaldırın, çocuk düğümü onay kutusu listesinde yinelemeli, ancak chkbox_AllChecked işlevindeki childCheckboxes listesinde sorun yaşıyorum (ana düğümün onay kutusunu işaretleyin/etkinliği kaldırın). Bazı sebeplerden dolayı liste boş. Sorun, For döngüsünde iken listeyi doldurmaya çalıştığım sorun. Neyi yanlış yaptığımı kimse anlatabilir mi? Yardım için

Public Class Question 

Dim childCheckbox As CheckBox 
Dim childCheckboxes As New List(Of 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 

    Dim i As Integer = 0 
    Dim childCheckboxes(sites.Length) As CheckBox 

    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 c In childCheckboxes 
       c.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 

Teşekkür:

İşte Kod Bu!

+0

'List (Of CheckeckBox)' yerine 'CheckedListBox' kullanılmamalıdır mı? –

cevap

0

Tamam bunu anladım.

1) Bu satırı istemedim: Dim childCheckboxes (site.Length) CheckBox gibi bir dizi değil, çünkü bu bir liste.

2) İlk satır Değişmek için gereken silindikten sonra: childCheckboxes (i) Buna = childCheckbox : childCheckboxes.Add (childCheckbox) o

var ki! Bitti. Gerisi işe yarıyor.