0
我有一個父節點和兩個子節點的TreeView。每個節點都包含一個存儲在TreeViewItem中的複選框。我希望在用戶檢查父節點時將兩個子節點複選框設置爲IsChecked = true,並且當用戶取消選中父節點時,我希望兩個子節點複選框爲IsChecked = false。VB.NET WPF空引用異常
我有一個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
感謝您的幫助!
感謝那些解決了NullReference異常,但childCheckboxes列表仍是空的,當我嘗試在chkbox_AllChecked方法來使用它...任何想法,爲什麼它在那裏是空的? – zzMzz 2010-11-19 18:21:12
而不是按索引分配列表元素,請使用.Add()方法。 – 2010-11-19 21:57:14